【问题标题】:Changing WebControl Property Inside of a Repeater更改中继器内的 WebControl 属性
【发布时间】:2009-05-19 06:11:10
【问题描述】:

我有一个转发器控件,其中包含一个 ItemTemplate,其中包含一个数据绑定标签和一个 DropDownList 控件。对于每次迭代,我想在每次迭代时更改 DropDownList 的 ID,以便在提交时使用这些值作为输入。谁能告诉我这通常是怎么做的?谢谢。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    这是自动为您完成的,有关其工作原理的详细信息,请参阅Using the NamingContainer Property to Determine a Control's Naming Container

    我想这可能不是您想要的。为了从下拉列表中获取值,您应该遍历转发器中的项目并使用 FindControl 方法根据您指定的 ID 查找下拉列表。

    foreach(RepeaterItem item in repeater1.Items) {
        DropDownList dropdown = (DropDownList)item.FindControl("DropDownList1")
        //dropdown.SelectedValue
    }
    

    编辑:根据您的评论,我不会将下拉列表重命名为您数据库中的 ID。相反,您应该在中继器中放置一个隐藏的文字控件。将其值设置为数据库记录的 ID。然后像获取下拉列表的值一样获取ID。

    (Literal)item.FindControl("ListeralWithDataBaseId")
    

    您的 aspx 标记将如下所示

    <asp:Literal runat="server" id="ListeralWithDataBaseId" 
         Value='<%# Eval("Id")' %> Visible="false" />
    

    【讨论】:

    • 是的,我的目的要求我在每次迭代时指定 ID,以便在提交表单时,我可以使用这些 ID 在数据库表中设置值。
    【解决方案2】:

    我发现最简单的方法是将 PlaceHolder 放入 Repeater,然后在设计时创建 DropDownList 控件,而不是尝试在设计时创建一个并在迭代时更改 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多