我有以下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
,即使我选择了不同的选项。
有什么问题? 非常感谢你。
答案 0 :(得分:2)
我猜测上面的代码来自PageLoad
事件。您可能希望将其包装在if(!isPostBack)
块中。
答案 1 :(得分:1)
请确保Page_Load
只在IsPostBack
为假时填充下拉列表。
例如
public void Page_Load(...)
{
if (!IsPostback())
UpdateDisplay();
}
答案 2 :(得分:1)
你什么时候绑定下拉?你可以任意包装 如果(page.ispostback == false) 在检查其值之前,您可能会对页面加载进行绑定..
答案 3 :(得分:1)
在ASP.NET页面的Init和Load之间分配ViewState。您的事件处理程序在加载后发生。如果您以编程方式设置用户将使用的控件中的内容,则需要在应用 ViewState之前处理。换句话说,将其移至Page_Init。然后,ViewState启动,您将看到处理程序执行时用户实际选择的内容。