Cer*_*rts 4 asp.net null repeater dataitem
我将我的转发器的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>
Run Code Online (Sandbox Code Playgroud)
更多代码:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
正在生成:
public List<MyProducts> TheProducts
{
get { // Invoking webservice, getting response as xml and converting it to a list of MyProducts }
}
Run Code Online (Sandbox Code Playgroud)
我的用户控制:
// Bind products in cart
r.DataSource = TheProducts;
r.DataBind();
// Debugging "r.Items[n].DataItem" now shows "null", eventhough all objects has been correctly binded
Run Code Online (Sandbox Code Playgroud)
编辑#2,调试信息.DataSource被正确加载,但Repeater.Items [3] .DataItem为null.它应该有价值,对吗? 截图
编辑#3,我现在得到它,我认为在设置DataSource时总是可以访问DataItem,并且没想到包含完整的代码(我试图在Page_Load中访问它).
用户编辑了数量值后,我想保存MyProducts的新数量.我通过放置一个包含MyProducts id的hiddenfield来解决它,这样我就可以手动查找并从那里获取MyProducts对象.
感谢emremp,Mark Avenius和其他所有投入的人.
出于什么目的,您需要整个列表?呈现页面后,不保留Repeater绑定的列表.如果您需要保留它,您可以将其放入会话并根据需要检索它(例如,在Page_Load上):
private List<MyProducts> _myList;
protected void Page_Load(object sender, EventArgs e)
{
_myList = Session[MYPRODUCTSKEY] as IList;
}
Run Code Online (Sandbox Code Playgroud)
你也可以将它放入你的getter中(首先检查会话,并在必要时调用webservice):
public List<MyProducts> TheProducts
{
get
{
if(Session[MYPRODUCTSKEY] == null)
Session[MYPRODUCTSKEY] = //invoke webservice
return Session[MYPRODUCTSKEY] as List<MyProducts>;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10598 次 |
| 最近记录: |