簡體   English   中英

回發時FormView.DataItem為null

[英]FormView.DataItem is null on postback

我在ASP.NET頁面上使用LinqDataSource和FormView並啟用了分頁。 我試圖訪問PageLoad上的FormView的DataItem屬性,我在第一頁加載時沒有遇到任何問題,但是一旦我在FormView上使用Next / Prev頁面按鈕(導致回發), DataItem屬性為null,即使在FormView中顯示一條記錄。 任何想法為什么它在第一頁加載但不在回發上正常工作?

如果你很好奇我的PageLoad事件是什么樣的,這里是:

protected void Page_Load(object sender, EventArgs e)
{
    Label lbl = (Label)fvData.FindControl("AREALabel");
    if (fvData.DataItem != null && lbl != null)
    {
        INSTRUMENT_LOOP_DESCRIPTION record = (INSTRUMENT_LOOP_DESCRIPTION)fvData.DataItem;
        var area = db.AREAs.SingleOrDefault(q => q.AREA1 == record.AREA);
        if (area != null)
            lbl.Text = area.AREA_NAME;
    }
}

綁定到任何數據綁定控件的對象將不會保留在頁面的ViewState中

因此,在后續帖子中,除非重新綁定控件,否則DataItem屬性將為null

綁定控件時,此屬性將包含對象的引用。

通常,如果要在綁定對象時執行某些操作,則需要訪問此屬性,因此需要對DataBound事件做出反應

例:

產量

在此輸入圖像描述

代碼背后

protected void ds_DataBound(object sender, EventArgs e)
{
    var d = this.fv.DataItem as employee;
    this.lbl.Text = d.lname;
}

ASPX

    <asp:LinqDataSource ID="lds" runat="server"
        ContextTypeName="DataClassesDataContext"
        TableName="employees" 
    >

    </asp:LinqDataSource>
    <asp:FormView runat="server" ID="fv" DataSourceID="lds" AllowPaging="true" 
        OnDataBound="ds_DataBound">
        <ItemTemplate>
            <asp:TextBox Text='<%# Bind("fname") %>' runat="server" ID="txt" />
        </ItemTemplate>
    </asp:FormView>
    <br />
    <asp:Label ID="lbl" runat="server" />

您的數據不會保留在PostBack 您需要使用以下內容在PageIndexChanging事件中重新綁定FormView

protected void FormView_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
    FormView.PageIndex = e.NewPageIndex;
    //rebind your data here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM