2

ASP.NETにページがある状況があります。このページには、質問に対する5つの解決策を含むRadioButtonListがあります。RadioButtonListは、これらのソリューションを持つオブジェクトによってフィードされます。

グラフィックコントロールの負荷を更新するために、毎秒実行されるタイマーがあります。RadioButtonListの選択に加えて、すべてが機能します。

これが起こったことです

RadioButtonListの項目とタイマーティックを選択すると、RadioButtonLIst値のselectedIndexは0になります。

これは、リストの最初の項目を選択することを意味します。ただし、「はい」の値が含まれているアイテムをクリックすると(値フィールドには「いいえ」または「はい」のいずれかを含めることができます)、このアイテムにとどまります。

まず第一に、他のPage_Loadイベントは何もしないので、タイマーがRadioButtonListの選択を再選択する理由がわかりません。そして、それが理にかなっているとしても、なぜそれが答えのいくつかを再選択するのか私にはわかりません。

私は次の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を再選択します。ただし、これは一貫性がなく、再選択されない場合があります。むしろ、まったく再選択しなかったほうがいいです!:)

4

1 に答える 1

0

他に考えられる原因がないかどうかはわかりませんが、ポストバックのPage_LoadでRadioButtonListをバインドしないでください。そうしないと、選択が失われます。

if (!IsPostBack) {
   SetupPage();
}

これは、ページが最初に読み込まれたときと、そのデータソース(質問を更新するイベントハンドラーのfe)を変更したときにのみ実行してください。

  • RadioButtonListをページに動的に追加しています。わかりました。これはすべてのポストバックで実行する必要があります(可能な場合はPage_Initで)。ただし、ビューステートはポストバックの選択を保存するため、すべてのポストバックでデータソースにリバウンドする必要はありません。したがって、RadioButtonList.DataBindからRadioButtonListの(再)作成と追加を分割します。1つ目はすべてのポストバックで実行する必要があり、2つ目は最初のロード時とソースが変更されたときにのみ実行する必要があります(イベントハンドラーのfe)。
  • RadiobuttonListのIDを設定します。そうしないと、ポストバック後にViewStateがロードされません。IDは一意である必要があります。複数のRadioButtonListを追加する場合は、カウンターなどを使用してください。
于 2010-11-16T18:17:10.113 に答える