在循环中以编程方式分配HiddenField值

时间:2014-06-20 22:09:38

标签: c# asp.net loops webforms

default.aspx上我有以下隐藏字段:

<asp:HiddenField runat="server" ID="icon1" />
<asp:HiddenField runat="server" ID="icon2" />
<asp:HiddenField runat="server" ID="icon3" />

如您所见,该字段的名称每次都相同,但增加1到3。

在我的代码背后,我一直在这样做(if语句和其他代码为了简洁而删除 - 这是它的核心):

icon1.Value = "Bonus1";
icon2.Value = "Bonus2";
icon3.Value = "Bonus3";

我必须每次都单独指定iconX.Value吗?我是否可以在循环中一次性完成所有操作(为简洁起见还删除了其他所有内容)?

for (int i = 1; i <=3; i++)
{
    icon(i).Value = "Bonus" + i.ToString();
}

我读过的所有内容都让我相信这在C#中是不可能的。让我假装我有50 iconX.Value = whatever to assign。循环具有最合乎逻辑的意义。可能的?

2 个答案:

答案 0 :(得分:2)

  

循环最具逻辑意义。可能的?

是。使用页面的FindControl方法按ID查找控件:

for (int i = 1; i <= 3; i++)
{
    HiddenField field = (HiddenField)this.FindControl("icon" + i);
    field.Value = "Bonus" + i.ToString();
}

注意:由于FindControl的返回类型为Control,您必须转换结果才能访问特定于HiddenField的属性。

答案 1 :(得分:0)

您必须在HTML部分中创建asp:panel

然后,在c#代码中,创建一个循环并创建您描述的元素。

完全配置元素后,将其添加到面板中。

.ASPX文件

<asp:Panel ID="panel_controls" runat="server">    </asp:Panel>

C#代码

for (int i = 1; i <= 3; i++) {
    HiddenField myField = new HiddenField();
    myField.ID = "icon" + i;
    myField.Value = "Bonus" + i;
    panel_controls.Controls.Add(myField);
}