Таймер в UPdatePanel изменяет выбранный индекс RadioButtonList - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть ситуация, когда у меня есть страница в ASP.NET.На этой странице у меня есть RadioButtonList, который содержит 5 решений вопроса.RadioButtonList получает объект, который имеет эти решения.

У меня есть таймер, который запускается каждую секунду, чтобы обновлять загрузки графических элементов управления.Все работает, кроме выбора RadioButtonList.

Это то, что происходит :

Когда я выбираю элемент в RadioButtonList и отметку таймера, selectedIndex значения RadioButtonLIstравно 0.

Это означает, что он выбирает ПЕРВЫЙ элемент в списке.Однако, если я щелкну элемент, в котором есть значение «Да» (поле значения может иметь «Нет» или «Да», оно останется в этом элементе.

Прежде всего, японятия не имею, почему таймер повторно выбирает мой выбор RadioButtonList, поскольку любое другое событие Page_Load ничего не делает. И даже если это имеет смысл, я понятия не имею, почему оно просто повторно выбирает НЕКОТОРЫЕ ответы ..

У меня есть следующий HTML-код:

<asp:Timer ID="AssignmentTimer" runat="server" Interval="1000">
</asp:Timer>


<asp:UpdatePanel ID="FightUpdatePnl" runat="server" UpdateMode="Always" ChildrenAsTriggers="True">
   <Triggers>
      <asp:AsyncPostBackTrigger ControlID="AssignmentTimer" EventName="Tick"/>
   </Triggers>

   <ContentTemplate>
      <asp:Panel ID="AssignmentDiv" runat="server" CssClass="FightDiv">
      </asp:Panel>
   </ContentTemplate>
</asp:UpdatePanel>

У меня есть следующий код:

protected void Page_Load(object sender, EventArgs e)
{
    SetupPage();
}

private void SetupPage()
{
   RadioButtonList list = new RadioButtonList();

   list.DataSource = question.PossibleSolution;
   list.DataTextField = "Content";
   list.DataValueField = "IsAnswer";
   list.DataBind();

   AssignmentDiv.Controls.Add(list);
}

Итак, чтобыПодводя итог, моя проблема в том, что ...

Когда таймер срабатывает, RadioButtonList повторно выбирает пункт 0. Это, однако, не согласовано, а иногда и не выбирается повторно. Я бы предпочелон вообще не переизбирался! :) 1029 *

1 Ответ

0 голосов
/ 16 ноября 2010

Я не уверен, что нет других возможных причин, но вам не следует связывать свой RadioButtonList в Page_Load при обратной передаче . В противном случае выбор теряется.

if (!IsPostBack) {
   SetupPage();
}

Делайте это только при первой загрузке страницы и при изменении ее источника данных (например, в обработчике событий, где вы обновляете вопросы).

  • Вы динамически добавляете RadioButtonList на страницу. Хорошо, это должно быть сделано при каждой обратной передаче (в Page_Init, если это возможно). Но его не нужно привязывать к источнику данных при каждой обратной передаче, потому что Viewstate сохранит выделение на обратной передаче. Поэтому разделите (пере) создание и добавление RadioButtonList из RadioButtonList.DataBind. Первое должно быть сделано при каждой обратной передаче, а второе - только при первой загрузке и при изменении источника (например, в обработчике событий).
  • Установить идентификатор списка радиобутонов. В противном случае ViewState не будет загружен после обратной передачи. Идентификатор должен быть уникальным. Если вы добавляете более одного RadioButtonList, используйте счетчик или что-то подобное.
...