【发布时间】:2010-10-08 08:27:36
【问题描述】:
我将转发器的 DataSource 设置为 List(MyProducts 是一个简单的类,仅包含 get/setter)。
在此和DataBind() 之后,我可以在调试模式下看到每个Repeater.Items 的DataItem 为空。在进行回发并尝试更新 MyProducts 时,Repeater.Items[n].DataItem 仍然为空,我无法将其转换为我的工作。
当我对我的转发器进行数据绑定时,为什么没有在每个 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 为空。它应该有一个价值,对吧? screenshot
编辑#3, 我现在明白了,我认为在设置 DataSource 时始终可以访问 DataItem,并没有考虑包含完整代码(我试图在 Page_Load 中访问它)。
用户编辑数量值后,我想为 MyProducts 保存新数量。我通过放置一个包含 MyProducts id 的隐藏字段来解决它,这样我就可以手动查找它并从那里获取 MyProducts 对象。
感谢 emremp、Mark Avenius 和所有参与的人。
【问题讨论】:
-
你可以给我们一些代码来使用......
-
我已经编辑了我的帖子并插入了更多代码。虽然它很基本,但我认为它不会给出任何澄清。我曾“希望”我错过了一些简单的事情,有人可以为我指出。我发现我能够绑定 MyProduct-objects 但 DataItem 是空的,这很奇怪......
-
你想在这里实现什么?您的“数量”是否绑定到中继器?
-
是的,Quantity 是 MyProducts 的一个属性,它绑定到一个 TextBox,因此用户可以对其进行编辑。这按预期工作。用户应该能够更改数量,然后单击“保存”并让代码循环通过 r.Items,为每个 MyProducts 对象保存数量
-
试试
标签: asp.net null repeater dataitem