【问题标题】:Dynamically adding a DropDownList动态添加 DropDownList
【发布时间】:2012-02-01 04:01:12
【问题描述】:

我正在尝试动态添加下拉菜单。 没有错误,除了我没有看到下拉菜单 代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    if(Ispostback)
    {
        DropDownList ddlPercent = new DropDownList();
        ddlPercent .ID = "ddlDiscountPercent";
        ddlPercent .AutoPostBack = true;
        Panel1.Controls.Add(ddlPercent );
        ddlPercent .ID = "ddlPercent " + 1;
        ddlPercent .Items.Add(new ListItem("5", "5%"));
        ddlPercent .Items.Add(new ListItem("10", "10%"));
        ddlPercent .Items.Add(new ListItem("15", "15%"));
        ddlPercent .Items.Add(new ListItem("20", "20%"));
        ddlPercent .Items.Add(new ListItem("30", "30%"));
        ddlPercent .Items.Add(new ListItem("50", "50%"));

        ddlPercent.SelectedIndexChanged += 
                  new EventHandler(ddlPercent_SelectedIndexChanged);

        ContentPlaceHolder cph = 
                  (ContentPlaceHolder)this.Master.FindControl("MainContent");
        cph.Controls.Add(ddlPercent );
        // ddlPercent.SelectedIndex =(Int32) ViewState["ddl_index"];
    }
}

protected void ddlPercent_SelectedIndexChanged(object sender, EventArgs e)
{
     DropDownList ComboBox=(DropDownList)sender;
     ViewState["ddl_index"] = ComboBox.SelectedValue;        
}

【问题讨论】:

  • 我知道这是一个不好的问题,但是 -3 没有给 OP 一个注释,要求他们解决他们的问题(详细说明您想要解决的问题)......这有点荒谬。

标签: c# asp.net drop-down-menu webforms


【解决方案1】:

问题可能在于您没有足够早地将控件添加到页面。需要在页面生命周期的早期添加控件以绑定它们的事件。

您在Load 事件中这样做,为时已晚。尝试在Init 事件期间添加它或覆盖CreateChildControls 方法。

还要确保在每个页面请求(包括回发)上都执行此操作。

希望这对你有用。

【讨论】:

    【解决方案2】:

    似乎由于IsPostBack 条件,此代码仅在页面被重新发布或触发事件时才会运行。

    【讨论】:

      【解决方案3】:
      1. 将该代码移至 OnInit (Page_Init)
      2. 删除if(Ispostback) 添加控件到控件树时的检查。几乎从不在动态添加控件时需要注意回发状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多