【发布时间】:2009-05-19 06:11:10
【问题描述】:
我有一个转发器控件,其中包含一个 ItemTemplate,其中包含一个数据绑定标签和一个 DropDownList 控件。对于每次迭代,我想在每次迭代时更改 DropDownList 的 ID,以便在提交时使用这些值作为输入。谁能告诉我这通常是怎么做的?谢谢。
【问题讨论】:
标签: asp.net
我有一个转发器控件,其中包含一个 ItemTemplate,其中包含一个数据绑定标签和一个 DropDownList 控件。对于每次迭代,我想在每次迭代时更改 DropDownList 的 ID,以便在提交时使用这些值作为输入。谁能告诉我这通常是怎么做的?谢谢。
【问题讨论】:
标签: asp.net
这是自动为您完成的,有关其工作原理的详细信息,请参阅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" />
【讨论】:
我发现最简单的方法是将 PlaceHolder 放入 Repeater,然后在设计时创建 DropDownList 控件,而不是尝试在设计时创建一个并在迭代时更改 ID。
【讨论】: