Выбранный элемент не обновляется? - PullRequest
0 голосов
/ 25 марта 2010

У меня есть следующий элемент управления 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 ]

2 голосов
/ 25 марта 2010

Я предполагаю, что приведенный выше код взят из события PageLoad. Вы можете обернуть это в if(!isPostBack) блок.

1 голос
/ 25 марта 2010

ViewState назначается между Init и Load для страницы ASP.NET. Ваши обработчики событий происходят после загрузки. Если вы программно настраиваете содержимое в элементах управления, которые будет использовать ваш пользователь, вы захотите обработать это до применения ViewState. Другими словами, переместите его в Page_Init. После этого включается ViewState, и вы увидите, что пользователь фактически выбрал, когда ваш обработчик выполняется.

1 голос
/ 25 марта 2010

Когда вы привязываете выпадающий список? Вы можете любой завернуть в Если (page.ispostback == false) Похоже, что вы можете выполнять привязку при загрузке страницы, прежде чем проверять ее значение.

1 голос
/ 25 марта 2010

Убедитесь, что в вашем Page_Load вы заполняете раскрывающийся список только тогда, когда IsPostBack ложно.

Например

 public void Page_Load(...)
 {
      if (!IsPostback())
          UpdateDisplay();
 }
...