加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Repeater.Items上的DataItem始终为null

发布时间:2020-12-16 06:54:04 所属栏目:asp.Net 来源:网络整理
导读:我将我的转发器的DataSource设置为List(MyProducts是一个简单的类,仅包含get / setters). 在此和DataBind()之后,我可以在调试模式中看到每个Repeater.Items的DataItem为null.在进行回发并尝试更新MyProducts时,Repeater.Items [n] .DataItem仍为null,我无法
我将我的转发器的DataSource设置为List(MyProducts是一个简单的类,仅包含get / setters).

在此和DataBind()之后,我可以在调试模式中看到每个Repeater.Items的DataItem为null.在进行回发并尝试更新MyProducts时,Repeater.Items [n] .DataItem仍为null,我无法投射它,以完成我的工作.

当我对转发器进行数据绑定时,为什么不在每个RepeaterItem上设置DataItem?我不能想/谷歌出来.我的代码的每个其他方面都正常工作(将数据从MyProducts输出到aspx,例如:

<asp:TextBox runat="server" id="q" Text='<%# DataBinder.Eval(Container.DataItem,"Quantity")%>'></asp:TextBox>

更多代码:

public class MyProducts
    {
        public string Number
        {
            get; set;
        }

        public decimal Price
        {
            get; set;
        }

        public decimal Quantity
        {
            get; set;
        }

        public decimal Total
        {
            get { return Quantity * Price; }
        }
    }

正在生成:

public List<MyProducts> TheProducts
{
 get { // Invoking webservice,getting response as xml and converting it to a list of MyProducts }
}

我的用户控制:

// Bind products in cart
r.DataSource = TheProducts;
r.DataBind();
// Debugging "r.Items[n].DataItem" now shows "null",eventhough all objects has been correctly binded

编辑#2,调试信息. DataSource被正确加载,但Repeater.Items [3] .DataItem为null.它应该有价值,对吗?
screenshot

编辑#3,
我现在得到它,我认为DataItem在设置DataSource时总是可以访问,并且没有想到包含完整代码(我试图在Page_Load中访问它).

用户编辑了数量值后,我想保存MyProducts的新数量.我通过放置一个包含MyProducts id的隐藏字段来解决它,这样我就可以手动查找并从那里获取MyProducts对象.

感谢emremp,Mark Avenius和其他所有投入的人.

解决方法

出于什么目的,您需要整个列表?呈现页面后,不保留Repeater绑定的列表.如果您需要保留它,您可以将其放入会话并根据需要检索它(例如,在Page_Load上):

private List<MyProducts> _myList;
protected void Page_Load(object sender,EventArgs e)
{
    _myList = Session[MYPRODUCTSKEY] as IList;
}

你也可以将它放入你的getter中(首先检查会话,并在必要时调用webservice):

public List<MyProducts> TheProducts
{
 get 
 { 
     if(Session[MYPRODUCTSKEY] == null)
         Session[MYPRODUCTSKEY] = //invoke webservice
     return Session[MYPRODUCTSKEY] as List<MyProducts>;
 }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读