asp.net - Repeater.Items 上的 DataItem 始终为空

标签 asp.net null repeater dataitem

我将转发器的 DataSource 设置为 List(MyProducts 是一个简单的类,仅包含 get/setter)。

在此和 DataBind() 之后,我可以在 Debug模式下看到每个 Repeater.Items 的 DataItem 为空。在进行回发并尝试更新 MyProducts 时,Repeater.Items[n].DataItem 仍然为空,我无法将其转换为我的工作。

当我对我的转发器进行数据绑定(bind)时,为什么没有在每个 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 为空。它应该有一个值(value),对吧?
screenshot

编辑#3,
我现在明白了,我认为在设置 DataSource 时始终可以访问 DataItem,并且没有考虑包含完整的代码(我试图在 Page_Load 中访问它)。

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

感谢 emremp、Mark Avenius 和所有其他参与的人。

最佳答案

出于什么目的,您需要整个列表?页面渲染完成后,Repeater绑定(bind)的列表不保留。如果您需要保留它,您可以将其放入 session 并根据需要检索它(例如在 Page_Load 上):

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

您也可以将其放入您的 getter(首先检查 session ,并在必要时调用 Web 服务):
public List<MyProducts> TheProducts
{
 get 
 { 
     if(Session[MYPRODUCTSKEY] == null)
         Session[MYPRODUCTSKEY] = //invoke webservice
     return Session[MYPRODUCTSKEY] as List<MyProducts>;
 }
}

关于asp.net - Repeater.Items 上的 DataItem 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3888856/

相关文章:

ios - 为什么(或何时)我的应用会被 iOS 重置?

android - 为什么我得到 : null cannot be cast to non-null type android. widget.SearchView ?

c# - 如何使用转发器显示 session 中的成员?

asp.net - asp.net 中继器中的服务器控件

c# - 在页面重新加载时,所有对象都被销毁了?

asp.net - 永远不会调用 ValueProvider

c# - 向客户端发送 ICalendar 事件,同时继续运行您的代码

Asp.net 自定义 http 处理程序位于另一个 ashx http 处理程序之前

MySQL 关于 employee 和 staff 以及使用连接的空值