【问题标题】:Retain Selected Value of dynamically bound dropdownlist after postback回发后保留动态绑定下拉列表的选定值
【发布时间】:2012-04-30 20:55:32
【问题描述】:

我有一个下拉列表,我在 aspx 标记上声明如下:

<asp:DropDownList ID="State" runat="server"></asp:DropDownList>

然后我像这样在页面加载时绑定它:

protected void Page_Load(object sender, EventArgs e)
    {
       BindDropdowns();
    }
private void BindDropdowns()
    {
        State.DataSource = DataAccess.GetStates();
        State.DataValueField = "FieldId";
        State.DataTextField = "FieldName";
        State.DataBind();
    }

回发后不保留所选值,我也无法触发 selectedindexchangedevent。怎么了?

【问题讨论】:

    标签: asp.net drop-down-menu selectedvalue


    【解决方案1】:

    请像这样更改您的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
       if (!Page.IsPostback)
           BindDropdowns();
    }
    

    这意味着您的下拉控件仅在第一个页面加载时绑定一次

    【讨论】:

    • 好吧,当我这样做时,下拉列表在回发后失去了绑定,我知道 - 这是一把双刃剑......你知道为什么会这样吗?
    • @user560498:它不应该失去它的绑定。如果是你做错了什么。这没有什么动态的。这是标准的数据绑定。
    • 好的。这就是我的想法,我的页面可能有其他问题,谢谢你....
    【解决方案2】:

    您必须使用AutoPostBack="true"

    <asp:DropDownList ID="State" AutoPostBack="true" 
     runat="server"></asp:DropDownList>
    

    并且还声明女巫事件处理程序是这样的:

    <asp:DropDownList ID="State" AutoPostBack="true" 
    OnSelectedIndexChanged="State_SelectedIndexChanged" 
    runat="server"></asp:DropDownList>
    

    然后在代码中。只在不回发时绑定:

    protected void Page_Load(object sender, EventArgs e)
    {
       if (!Page.IsPostback)
           BindDropdowns();
    }
    
    protected void State_SelectedIndexChanged(object sender, System.EventArgs e)  
    {  
        var somevalue= State.SelectedValue;  
    } 
    

    【讨论】:

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