C# 回发时FormView.DataItem为空
我在ASP.NET页面上使用LinqDataSource和启用分页的FormView。我正在尝试访问C# 回发时FormView.DataItem为空,c#,asp.net,.net,C#,Asp.net,.net,我在ASP.NET页面上使用LinqDataSource和启用分页的FormView。我正在尝试访问PageLoad上的FormView的DataItem属性,并且在第一页加载上没有问题,但是只要我使用FormView上的Next/Prev page按钮(导致回发),DataItem属性为空,即使FormView中显示了一条记录。你知道为什么它可以在第一页加载时正常工作,但在回发时却不行吗 如果您想知道我的PageLoad事件是什么样子,请看以下内容: protected void Page_L
PageLoad
上的FormView的DataItem
属性,并且在第一页加载上没有问题,但是只要我使用FormView上的Next/Prev page按钮(导致回发),DataItem
属性为空,即使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;
}
}
您的数据将不会保留在
PostBack
上。您需要在PageIndexchange
事件中重新绑定FormView
,方法如下:
protected void FormView_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
FormView.PageIndex = e.NewPageIndex;
//rebind your data here
}
绑定到任何数据绑定控件的对象将不会在页面的ViewState中持久化 因此,在后续的POST中,
DataItem
属性将为null,除非您重新绑定控件
绑定控件时,此属性将包含对对象的引用
如果要在对象绑定时执行某些操作,通常需要访问此属性,因此需要对DataBound
事件作出反应
例如:
输出
代码隐藏
ASPX
可能您必须在页面中重新绑定formview\u索引更改事件如果formview使用的是我在页面上放置的LinqDataSource控件中的数据,您如何重新绑定它?我在FormView和LinqDataSource上都调用了DataBind(),但两者都不起作用。我只是在使用页面上的LinqDataSource控件,如何强制它重新绑定数据?分页似乎工作正常,我在FormView和LinqDataSource上都调用了DataBind()
,但两者似乎都不工作。您希望对FormView进行数据绑定。也许可以在FormView中尝试“EnableViewstate=“true”?EnableViewstate
默认为true。非常奇怪的行为,因为当我翻页时,我可以清楚地看到表单视图中的数据-我就是无法访问数据项:(工作起来很有魅力。使用DataBound
事件而不是PageLoad
事件就成功了。谢谢!
protected void ds_DataBound(object sender, EventArgs e)
{
var d = this.fv.DataItem as employee;
this.lbl.Text = d.lname;
}
<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" />