如何在动态创建的下拉列表中添加值 [英] How do add values in dynamically created drop downlist

查看:61
本文介绍了如何在动态创建的下拉列表中添加值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何正文都可以帮助我在动态创建的下拉列表中添加值。我已经为它写了一些代码。但是当我点击按钮在下拉列表中添加值时,具有动态控件的面板由于回发而没有显示任何值。这是代码:



ASPX:

Can any body help me to add values in drop down list which is created dynamically. I have written some code for it. But when i click on button to add the value in drop down list, panel having dynamic controls shows no value in it due to post back.Here is the code:

ASPX:





<form id="form1" runat="server">

        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <div>
            <asp:DropDownList ID="ddlIds" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlIds_SelectedIndexChanged">
                <asp:ListItem>Textbox</asp:ListItem>
                <asp:ListItem>Button</asp:ListItem>
                <asp:ListItem>CheckBox</asp:ListItem>
                <asp:ListItem>DropdownList</asp:ListItem>
            </asp:DropDownList>

            <asp:Panel ID="Panel1" runat="server" EnableViewState="True"></asp:Panel>
            <asp:HiddenField ID="hdnValue" runat="server" />

            <asp:UpdatePanel runat="server" ID="updpnl_pnl_controls">

                <ContentTemplate>
                    <asp:Panel runat="server" ID="pnl_items">
                        <asp:TextBox runat="server" ID="txtvalue"></asp:TextBox>
                        <asp:Button runat="server" ID="addbtn" Text="Add Item" OnClick="addbtn_OnClick" />
                        <asp:Button runat="server" ID="doneBtn" Text="Done" OnClick="doneBtn_OnClick"/>
                        <asp:HiddenField ID="hdnId" runat="server"></asp:HiddenField>
                    </asp:Panel>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger runat="server" ControlID="addbtn" />
                </Triggers>
            </asp:UpdatePanel>
        </div>
    </form>





ASPX.CS :





ASPX.CS:

protected void Page_Load(object sender, EventArgs e)
   {
       pnl_items.Visible = false;
       if (!IsPostBack)
       {
           create_controls();
       }
   }
   protected void ddlIds_SelectedIndexChanged(object sender, EventArgs e)
   {

       create_controls();

   }

   protected void create_controls()
   {
       switch (ddlIds.SelectedItem.Text)
       {
           case "Textbox":
               String txt = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
               string txtid = "txtBox" + txt;
               hdnValue.Value = hdnValue.Value + "^" + txtid;
               break;
           case "CheckBox":
               String chkbox = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
               string chkid = "chkBox" + chkbox;
               hdnValue.Value = hdnValue.Value + "^" + chkid;
               break;
           case "Button":
               string count = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
               string id = "BttnBox" + count;
               hdnValue.Value = hdnValue.Value + "^" + id;
               break;
           case "DropdownList":
               string ddcount = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
               string ddid = "Dropdown" + ddcount;
               hdnValue.Value = hdnValue.Value + "^" + ddid;
               break;
       }


       if (hdnValue.Value == "") return;
       var val = hdnValue.Value.Split('^');
       foreach (var ds in val)
       {
           if (ds.Contains("chk"))
           {
               var chkBox = new CheckBox { ID = ds, Text = "Test" };
               Panel1.Controls.Add(chkBox);
               var lt = new Literal { Text = "<br />" };
               Panel1.Controls.Add(lt);
           }

           else if (ds.Contains("txt"))
           {
               var txtBox = new TextBox { ID = ds };
               Panel1.Controls.Add(txtBox);
               var lt = new Literal { Text = "<br />" };
               Panel1.Controls.Add(lt);
           }
           else if (ds.Contains("Bttn"))
           {
               var btn = new Button { ID = ds, Text = "Test" };
               Panel1.Controls.Add(btn);
               var lt = new Literal { Text = "<br />" };
               Panel1.Controls.Add(lt);
           }
           else if (ds.Contains("Drop"))
           {
               var ddl = new DropDownList { ID = ds };
               pnl_items.Visible = true;
               hdnId.Value = ds;
               Panel1.Controls.Add(ddl);
               var lt = new Literal { Text = "<br />" };
               Panel1.Controls.Add(lt);
           }
       }
   }

   protected void addbtn_OnClick(object sender, EventArgs e)
   {
       var i = Panel1.Controls.Count;
       var ddl = (DropDownList)Panel1.FindControl(hdnId.Value);
       ddl.Items.Add(new ListItem(txtvalue.Text, txtvalue.Text));
       pnl_items.Visible = true;
       //throw new NotImplementedException();
   }

   protected void doneBtn_OnClick(object sender, EventArgs e)
   {
       pnl_items.Visible = false;
       hdnId.Value = string.Empty;
   }







谢谢...




Thanks...

推荐答案

参考 - 保留动态创建控件的状态ASP.NET应用程序 [ ^ ]。

Refer - Retaining State for Dynamically Created Controls in ASP.NET applications[^].
引用:

当动态地向ASP.NET添加控件时在运行时页面中,对象引用在回发时丢失,因为它们在代码隐藏中没有句柄。在回发后访问这些对象时,用户输入的值不可用,并且它们看起来是空的。本文介绍如何使用ViewState重新创建并将回发值重新插入到对象中以访问其值。

When dynamically adding controls to an ASP.NET page in runtime the object references are lost at postback because they have no handle in the codebehind. The values entered by the user is not availible when accessing these objects after postback, and they seem empty. This article describes how to use ViewState to recreate and reinsert the postback values into the objects to access their values.

您必须在每个Post Post中重新创建控件。

You have to recreate the controls in each Post Back.


这篇关于如何在动态创建的下拉列表中添加值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆