0

我有以下 DropDownList 控件:

<asp:DropDownList ID="SubjectFilter" runat="server" AutoPostBack="True" onselectedindexchanged="SubjectFilter_SelectedIndexChanged"></asp:DropDownList>

SubjectFilter数据:

BookStore b = new BookStore();
b.LoadFromXML(Server.MapPath("list.xml"));

SubjectFilter.DataSource = b.BooksList.Select(x => x.Subject).Distinct().ToArray();
SubjectFilter.DataBind();
SubjectFilter.Items.Insert(0, new ListItem("הכל", "Default"));

一切都很好。然而,在SubjectFilter_SelectedIndexChanged方法中,SubjectFilter.SelectedValue总是Default,即使我选择了不同的选项。

问题是什么?非常感谢你。

4

4 回答 4

2

我猜上面的代码来自PageLoad事件。您可能希望将其包装在一个if(!isPostBack)块中。

于 2010-03-25T16:59:43.483 回答
1

确保在你的Page_Load那你只填充下拉当IsPostBack是假的。

例如

 public void Page_Load(...)
 {
      if (!IsPostback())
          UpdateDisplay();
 }
于 2010-03-25T17:00:28.727 回答
1

你什么时候绑定下拉?您可以将任何包装在 If(page.ispostback ==false) 中看起来您可能在页面加载时绑定,然后再检查它的值..

于 2010-03-25T17:01:08.073 回答
1

ViewState 在 ASP.NET 页面的 Init 和 Load 之间分配。您的事件处理程序在加载后发生。如果您以编程方式在用户将使用的控件中设置内容,则您希望在应用 ViewState之前处理该内容。换言之,将其移至 Page_Init。之后,ViewState 启动,您将看到当您的处理程序执行时用户实际选择的内容。

于 2010-03-25T17:02:02.597 回答