c# - WebForms Repeater,设置文本框属性作为保存时的标识符
问题描述
我正在构建一个相对简单的 WebForm,它有两列,每列有大约 15 个固定输入字段,1 个是“其他”,计数为 (n)。
我创建了一个这样的中继器:
<asp:Repeater ID="rptClientItems" runat="server" OnItemDataBound="rptClientItems_ItemDataBound">
<ItemTemplate>
<div class="row">
<div class="col-md-8">
<asp:Label ID="lblItemType" runat="server"></asp:Label>
<asp:TextBox ID="txtOtherItemTypeDescription" runat="server" Visible="false" CssClass="lblandinput"></asp:TextBox>
</div>
<div class="col-md-4">
<asp:TextBox ID="txtItemTextBoxArea" runat="server"></asp:TextBox>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
现在在我的ItemDataBound()
函数中,我遍历所有数据库元素并在这些文本区域和标签中填充值。
问题 1是,当我单击SAVE()
. 在我的保存功能中,我不知道哪个Textbox
属于数据库中的哪个项目。
问题 2我txtOtherItemTypeDescription
是动态创建的,因此我使用保存Request.Form.GetValues("key")
来获取所有值,但是我觉得这不是最有效的方法,因为这也会导致在第一次保存后编辑这些项目会很痛苦。
我对这个很好的例子比较陌生,解释会有很长的路要走。谢谢
解决方案
如果您想继续使用中继器,最简单的解决方案是添加一个隐藏的标签,因为中继器没有DataKeyField
属性。你可以使用该标签来存储 ID。
<ItemTemplate>
<asp:Label ID="hiddenID" runat="server" Text='<%# Eval("ID") %>' Visible="false"></asp:Label>
</ItemTemplate>
是您的保存方法,然后您可以循环中继器项目并获取文本框和标签的值。
foreach (RepeaterItem item in rptClientItems.Items)
{
Label lb = item.FindControl("hiddenID") as Label;
TextBox tb = item.FindControl("txtItemTextBoxArea") as TextBox;
Label1.Text += lb.Text + ": " + tb.Text + "<br>";
}
推荐阅读
- python - RuntimeError:给定输入大小:(40x256x1)。计算的输出大小:(40x253x-2)。输出尺寸太小
- css - CSS 避免覆盖
- open-policy-agent - 断言集合中的每个字符串在对象中都有一个关联的键
- python-3.x - Dijkstra's algorithm in graph (Python)
- phpunit - xdebug.start_start_with_request=yes WITHOUT error if the debug client is not listening
- java - Validate a string using java 8 Stream. How to overcome "stream has already been operated upon or closed"?
- c# - 如何使用 LINQ 获取 5 个最常用的标签
- django - Django Admin method returns multiple instances instead of one
- azure-devops-server - 如何替换 Artifacts 中的包
- ruby - How to run "git blame" on a given set of files using Octokit