2015-09-17 16 views
0

我有一个包含带有HiddenField控件的中继器的表单,其中的ID是动态创建的。ASP.NET使用动态生成的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控件?

回答

0

我找到了解决这个问题的方法,所以想到我会在这里发布。

代替动态创建我设置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 

所以我然后可以通过访问这些值