我正试图找到一种方法来做一些我认为必须可行的事情,但我只是忽略了这一点 - 所以希望有人可以给我一点推动:)
我在ASP.NET中使用数据绑定(关闭视图状态 - 所以在这里和那里使用controlstate进行一些操作)来渲染在每个itemtemplate(repeaterPriceBands)中都有转发器的转发器(repeaterPriceClasses)。基本上,这会从一些文本和每个单元格中的下拉列表中呈现一个表格。
我正在尝试找到一种方法来枚举按钮的事件处理程序中的repeaterOuter,以便为我提供所有最初绑定元素的列表,这些元素现在有一个值为> 0的下拉列表,以及这个价值是什么。
public Dictionary<Price, int> SelectedPrices
{
get
{
var sel = new Dictionary<Price, int>();
foreach(RepeaterItem itemClass in repeaterPriceClasses.Items)
{
var repeaterPriceBands = itemClass.FindControl("repeaterPriceBands") as Repeater;
foreach(RepeaterItem itemBand in repeaterPriceBands.Items)
{
var context = (Price)itemBand.DataItem;
var listQty = itemBand.FindControl("listQty") as DropDownList;
if(listQty.SelectedValue.ToInt32() > 0)
{
sel.Add(context, listQty.SelectedValue.ToInt32());
}
}
}
return sel;
}
}
现在这会失败,因为在数据绑定完成后,itemBand.DataItem始终为null。
我应该用什么技巧来解决这个问题?
包含主键的隐藏字段 (不是理想的可以滥用和补充 重量到页面)
从中查找 基于索引的原始缓存数据 (似乎错了)
或其他什么 其他/更好的...?
编辑:我可以提供更多信息来帮助我们获得答案吗?
答案 0 :(得分:1)
当DataItem可用时,您可以尝试在ItemDataBound事件中为HTML元素添加额外的属性。
ddlSomething.Attributes["Attribute1"] = dataItemObject.PropertyName;
[编辑] 除了使用属性之外,您还可以为每一行渲染一些包含这样的JSON对象的数组。
var repeaterItemAttributes = [ { Prop1: val1, Prop2: val2, ... }, { ... }, ... ]
因此,通过使用它,您将不必呈现属性,并且您的代码也将符合XHTML(这不是必需的)。然后,您可以遍历对象数组并读取您喜欢的任何属性。您还可以将您正在讨论的轻量加密应用于属性值。 [/编辑]