asm*_*smo 10 asp.net null postback datalist dataitem
在我的ASP.NET表单中回发(单击一个按钮)后,我的表单的所有DataItem都为null.为什么?即使在回发后,我该怎么做才能检索DataList的内容?
protected void buttonAddRecord_Click(object sender, EventArgs e)
{
foreach (DataListItem item in listFields.Items)
{
// item.DataItem == null WTF?
}
}
protected void Page_Load(object sender, EventArgs e)
{
BindFields();
}
private void BindFields()
{
object setting = MySettings.GetSetting();
if (!Null.IsNull(setting))
{
listFields.DataSource =
DataProvider.GetData(int.Parse(setting.ToString()));
listFields.DataBind();
}
listFields.Visible = listFields.Items.Count > 0;
emptyMessage.Visible = listFields.Items.Count == 0;
}
Run Code Online (Sandbox Code Playgroud)
在这里找到我的答案.
约翰说,数据源项只有在数据绑定时才可用.初始加载后,它们不再可访问.
您可以考虑让对象或对象集合表示您使用网格更新的屏幕数据,然后将更改从该更新持久保存到数据库.
更准确地说,我使用HiddenField在帖子中存储ID,我从数据库请求数据,而不是试图从DataItem中获取数据(不能在数据绑定事件之外使用).
该HiddenField控件用于存储需要跨越的帖子被保存到服务器的值.
DataItem
仅在数据绑定时可用.
Load
之前Click
是你所以你要覆盖你的数据.
做这个:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindFields();
}
}
Run Code Online (Sandbox Code Playgroud)
您应该使用DataSource(如ObjectDataSource)来处理DataBinding和Update/Insert.
更新/建议:
使用PlaceHolders将数据绑定到您遇到麻烦.您应该考虑使用ListView,GridView,DataList或Repeater.我相信其中任何一个都可以做你想要的,你必须减少编程.利用你的时间来学习它们,而不是试图让它发挥作用,它注定要失败.
归档时间: |
|
查看次数: |
14511 次 |
最近记录: |