【问题标题】:How to create dynamic controls on the fly in asp.net;IndexChanged Event on dropdowns does not persist/fire after post back如何在 asp.net 中动态创建动态控件;下拉列表上的 IndexChanged 事件在回发后不会持续/触发
【发布时间】:2015-01-05 19:24:27
【问题描述】:

我有

几个动态下拉菜单

附加了选定的索引更改事件,但是一旦第一次触发索引更改事件并且回发完成后,它们会丢失该索引更改事件,但不会丢失项目值

所以它保存下拉列表的状态但不附加 回发时选择的索引更改事件。

AspxPage:

 <div>
    <asp:PlaceHolder ID="mp_1" runat="server"></asp:PlaceHolder>
    </div>

C#:

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {

        }

        private void ddl_IndexChanged(object sender, EventArgs e)
        {
            Response.Write("dsfsdf");
        }           

        protected void Page_Load(object sender, EventArgs e)
        {

 DropDownList ddl_1 = new DropDownList();
                ddl_1.ID = "ddl_1";
                ddl_1.AutoPostBack = true;
                ddl_1.EnableViewState = true;
                ddl_1.SelectedIndexChanged += new EventHandler(ddl_IndexChanged);
                this.mp_1.Controls.Add(ddl_1); 


            if(!IsPostBack)
            {
                DropDownList ddl_1 = (DropDownList)Page.FindControl("ddl_1");
                if (ddl_1 != null)
                {
                    List<ListItem> items = new List<ListItem>();
                    items.Add(new ListItem("Item 2", "Value 2"));
                    items.Add(new ListItem("Item 1", "Value 1"));
                    items.Add(new ListItem("Item 3", "Value 3"));
                    ddl_1.Items.AddRange(items.ToArray());
                }                
            }               
        }
    }

【问题讨论】:

  • 如果您的控件在回发时不存在,它们无法命中事件处理程序,请删除 if(!Page.IsPostBack) 并尝试

标签: c# asp.net


【解决方案1】:

创建和绑定动态子控件的最稳定方法是重写 CreateChildControls 方法:

See official sample

【讨论】:

    【解决方案2】:

    AspxPage:

     <div>
        <asp:PlaceHolder ID="mp_1" runat="server"></asp:PlaceHolder>
        </div>
    

    C#:

    public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Init(object sender, EventArgs e)
            {
                DropDownList ddl_1 = new DropDownList();
                ddl_1.ID = "ddl_1";
                ddl_1.AutoPostBack = true;
                ddl_1.EnableViewState = true;
                ddl_1.SelectedIndexChanged += new EventHandler(ddl_IndexChanged);
                this.mp_1.Controls.Add(ddl_1); 
            }
    
            private void ddl_IndexChanged(object sender, EventArgs e)
            {
                Response.Write("dsfsdf");
            }           
    
            // add entries in page load method not in init method
            protected void Page_Load(object sender, EventArgs e)
            {
                if(!IsPostBack)
                {
                    DropDownList ddl_1 = (DropDownList)Page.FindControl("ddl_1");
                    if (ddl_1 != null)
                    {
                        List<ListItem> items = new List<ListItem>();
                        items.Add(new ListItem("Item 2", "Value 2"));
                        items.Add(new ListItem("Item 1", "Value 1"));
                        items.Add(new ListItem("Item 3", "Value 3"));
                        ddl_1.Items.AddRange(items.ToArray());
                    }                
                }               
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2018-09-28
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多