我有以下转发器,它被来自SQL数据库的数据填充,比如四列。其中三个显示在转发器中(Name,Min,Max),第四个是表中的主键。如果需要,我可以将主键字段添加为转发器中的不可见标签。
<asp:repeater id="rpt" runat="server">
<ItemTemplate>
<asp:Label ID="repeaterLbl" text = <%#Container.DataItem("Name")%> runat="server"/>
<asp:Textbox ID="repeaterMinNumber" text = <%#Container.DataItem("Min")%> runat="server"/>
<asp:Textbox ID="repeaterMaxNumber" text = <%#Container.DataItem("Max")%> runat="server"/> <br />
</ItemTemplate>
</asp:repeater>
我的问题是,如果我更改文本框文本字段(对于Min或Max)并希望将数据保存回SQL表,如何将转发器中的正确行与正确的主键(或行)相关联在SQL表中)?如果在代码隐藏中提供代码,请在Visual Basic中执行此操作。
答案 0 :(得分:1)
我见过隐藏的字段用于你在这里描述的目的。
<asp:HiddenField ID="repeaterKey" runat="server"
Value='<%#Container.DataItem("KeyField")%>' />
然后您可以像其他字段一样引用隐藏字段(通过ID),但不必担心向客户端,最终用户等泄露密钥。
至于访问正确的键以关联重复字段中的每个项目。我通常会看到我们的Web开发人员使用.FindControl,如下所示:
For nRow = 0 To rpt.Items.Count - 1
Dim MyKey As New HiddenField
MyKey = rpt.Items(nRow).FindControl("repeaterKey")
Response.Write(MyKey.Value) // Or do somthing useful with MyKey
Next
或者通过使用通过按钮的CommandName或CommandArgument属性或其他控件传递的键字段值,通过转发器OnCommand事件发现值。有关如何执行此操作的详细信息,请查看microsoft docs。