ASP.NET使用动态生成的ID访问控件

时间:2015-09-17 14:02:30

标签: asp.net vb.net

我有一个表单,其中包含一个带有HiddenField控件的转发器,其中ID是动态创建的。

Dim tNewOrder As HiddenField = CType(e.Item.FindControl("tNewOrder"), HiddenField)
tNewOrder.ID = "tNewOrder" & CategoryId

当我提交表单时,我循环遍历转发器并尝试访问每个HiddenField值但我得到错误'对象引用未设置为对象的实例。'

For Each CatItem As RepeaterItem In reCategory.Items

    Dim hCategoryId As HiddenField = CType(CatItem.FindControl("hCategoryId"), HiddenField)
    Dim tNewOrder As HiddenField = CType(CatItem.FindControl("tNewOrder" & hCategoryId.Value), HiddenField)
    Response.Write(tNewOrder.Value)

Next

有没有办法找到动态生成ID的控件?

1 个答案:

答案 0 :(得分:0)

我找到了绕过这个问题的方法,所以我想在这里发布它。

我没有动态创建控件ID,而是将ID设置为'tNewOrder'和ClientIDMode:

更改此行:

tNewOrder.ID = "tNewOrder" & CategoryId

为:

tNewOrder.ClientIDMode = UI.ClientIDMode.Predictable

然后我知道ID将生成为每个转发器索引的tNewOrder_0,tNewOrder_1,tNewOrder_2。

然后我可以通过以下方式访问这些值:

For Each CatItem As RepeaterItem In reCategory.Items

    Dim tNewOrder As HiddenField = CType(CatItem.FindControl("tNewOrder"), HiddenField)
    Response.Write(tNewOrder.Value)

Next