0

リストビュー バインディング コード

<asp:Content ID="Content3" ContentPlaceHolderID="leftColumnPlaceHolder" runat="server">
    <asp:ListView ID="lvQuestions" runat="server" OnItemDataBound='lvQuestions_ItemDataBound'>
        <LayoutTemplate>
            <div id="itemPlaceholder" runat="server">
            </div>
            <asp:Button ID="btnSubmitAnswers" runat="server" Text="Submit Answers" OnClick="btnSubmitAnswers_Click" />
        </LayoutTemplate>
        <ItemTemplate>
            <div>
                <%# Container.DataItemIndex + 1 %>:<%# Eval("Body") %>
            </div>
            <asp:RadioButtonList ID="rdlAnswers" runat="server" DataSource='<%#Eval("ExamAnswer") %>' DataTextField='Body' DataValueField="AnswerId">
            </asp:RadioButtonList>
        </ItemTemplate>
    </asp:ListView>
</asp:Content>

以下のように、送信ボタンのクリックでリストビュー項目を取得している間、 qsnItem.DataItem をNULLとして取得しています。

foreach (ListViewDataItem qsnItem in lvQuestions.Items)
{
}

ここで何が問題なのかを提案してください。

4

1 に答える 1

5

ASP.NETのDataItemすべてのデータバインドされた Web コントロールは、コントロールを再度使用nullしない場合にポストバックされます。これは、有効 (デフォルト)DataBindの場合は不要です。ViewState

したがって、テンプレートのコントロールを使用して値を取得できます。

foreach (ListViewDataItem qsnItem in lvQuestions.Items)
{
    RadioButtonList rdlAnswers = (RadioButtonList)qsnItem.FindControl("rdlAnswers");
}

古い値が必要な場合は、データベースからそれらをロードするか、ListViewUpdatedEventArgs.OldValues Propertyを使用する必要があります。

于 2013-01-09T09:35:35.167 に答える