【问题标题】:ASP.NET Accessing control with dynamically generated IDsASP.NET 使用动态生成的 ID 访问控件
【发布时间】:2015-09-17 14:02:29
【问题描述】:

我有一个表单,其中包含一个带有 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 的控件?

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    我找到了解决这个问题的方法,所以我想把它贴在这里。

    我没有动态创建控件 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2013-01-21
      相关资源
      最近更新 更多