ListView.DataItem显示为null

Man*_*der 0 asp.net c#-4.0

Listview绑定代码

<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>
Run Code Online (Sandbox Code Playgroud)

在提交按钮上获取listview项目的同时单击..如下所示,我们将qsnItem.DataItem作为NULL.

foreach (ListViewDataItem qsnItem in lvQuestions.Items)
{
}
Run Code Online (Sandbox Code Playgroud)

请告诉我这里出了什么问题.

Tim*_*ter 5

DataItemASP.NET中的数据绑定的所有网络的控制都null在回传时没DataBind再控制,当它是不必要的ViewState启用(默认).

因此,您可以使用模板中的控件来获取值:

foreach (ListViewDataItem qsnItem in lvQuestions.Items)
{
    RadioButtonList rdlAnswers = (RadioButtonList)qsnItem.FindControl("rdlAnswers");
}
Run Code Online (Sandbox Code Playgroud)

如果需要旧值,则需要从数据库加载它们或使用ListViewUpdatedEventArgs.OldValues 属性.