如何使用Repeater的ItemIndex从Dictionary中检索值?

时间:2012-02-01 17:31:37

标签: c# data-binding repeater

我得到了一个我需要修改的页面,它有一个带有ItemTemplate的Repeater,其中包含输入人员地址的字段。每个地址字段看起来都像这样

<input type="text" id="line1<%# ((RepeaterItem)Container).ItemIndex + 1%>" 
    name="line1<%# ((RepeaterItem)Container).ItemIndex + 1%>" />

您可以看到我们将转发器的ItemIndex附加到文本框的html id和name字段的末尾。

在Code-behind中我们有一个名为DataProxy的类,它基本上是一个由Request.Params构建的字典,我们通常使用它来重新填充用户输入的表单。例如,他们将数据放在表单上,​​提交它,但验证失败,因为有几个字段是空的,但我们想重新填充他们之前输入的内容。我们会这样做:

<input type="text" name="myTextBox" id="myTextBox" 
    value="<%: DataProxy["myTextBox"].ToString() %>" />

通常情况下这很好用,但它不能在这个转发器内工作,我相信这是因为转发器的DataBind发生在我们已经在DataProxy字典中搜索了我们的值之后。这是我正在使用的代码:

<input type="text" id="line1<%# ((RepeaterItem)Container).ItemIndex + 1%>" 
    name="line1<%# ((RepeaterItem)Container).ItemIndex + 1%>"
    value="<%# DataProxy["line1" + (((RepeaterItem)Container).ItemIndex + 1).ToString()] %>" />

有没有办法可以使用Repeater的ItemIndex属性访问我的DataProxy字典?

请注意,我的转发器正在Page_Load()中进行数据绑定。

1 个答案:

答案 0 :(得分:0)

将字典转换为列表

Dictionary<string, object> dataProxy = new Dictionary<string, object>();
List<KeyValuePair<string, object>> list = dataProxy.ToList();

但是,您可能希望确保对数据进行排序,以便始终显示转发器。