无法在ASP C#中切换到DropDownList中的另一个值(它切换回以前的值)#

时间:2016-08-02 12:51:39

标签: c# asp.net

我定义了DDL的aspx文件:

<asp:DropDownList ID="myDDL" runat="server"
     OnSelectedIndexChanged="myDdlChange" 
     AutoPostBack="true"  EnableViewState="true" />

我的代码隐藏在文件

之后
protected void PopulateControl()
{
    //populate my DDL based on an array (OK)
}

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    PopulateControl();
}

protected override void OnLoad(EventArgs e)
{
            base.OnLoad(e);
            ...
            this.DataBind();
}
protected void myDdlChange(object source, EventArgs e)
{
    Session["myDDL"] = myDDL.SelectedValue;
    myTextBox.Text = MyMethod(myDDL.SelectedValue);
}

myTextBox是一个文本框,每当DDL通过将所选值作为参数的方法更改时,就会填充该文本框。

还需要为DDL添加更多内容以保持用户的选定值。 现在,当我切换到DDL中的另一个值时,我选择的值将切换回数组的第一个元素。

另外,当我调试并切换到DDL中的另一个值时,为什么myDdlChange方法不会成为焦点? (我在这个方法中有一个断点)

1 个答案:

答案 0 :(得分:3)

因为每次都这样做:

PopulateControl();

删除DropDownList中的所有值并重新添加它们。因此删除了用户选择的任何内容,并添加了一个新的(未选定的)值列表。每次页面加载时都会发生这种情况,这发生在myDdlChange处理程序之前。

您可以阻止此操作重新填充邮寄后的列表:

if (!IsPostBack)
    PopulateControl();

这样DropDownList仅在初始页面加载时填充,而不在后续的后页加载中填充。

  

另外,为什么myDdlChange方法在我调试并切换到DDL中的另一个值时不会成为焦点?

切换到其他值时是否回发到服务器?如果没有,那么没有什么是调用服务器端代码。如果要回发到服务器,是否已使用控件注册此事件?设计师通常会为您执行此操作,但如果您手动创建,则需要手动将其注册到控件中。