我有一个带有DropwDownlist控件的asp.net GridView和一些用于文本输入等的其他文本框。用户可以向网格添加多行并更改现有数据等。
我需要只为正在访问的当前行触发RequiredFieldValidator。我已经将InitialValue设置为正确的值并且我得到了验证器,我遇到的问题是它为每一行而不是当前正在处理的那一行触发。
有什么想法吗?
GridView中DropDown下的验证器:
<asp:RequiredFieldValidator ID="rfRoles" runat="server" ErrorMessage="Role Required"
ControlToValidate="ddlRole" ValidationGroup=roles InitialValue="-1" Display="Dynamic" SetFocusOnError="true" Text="*">
</asp:RequiredFieldValidator>
<asp:ValidationSummary ID="validateRole" runat="server" ShowMessageBox="True" ShowSummary="false" ValidationGroup="roles" />
网格中的我的保存按钮:
<EditItemTemplate>
<asp:LinkButton ID="lnkSave" runat="server" Text="Save" CommandName="Update" CausesValidation="true" ForeColor="#AE0917" ValidationGroup="roles" Font-Bold="true"></asp:LinkButton></EditItemTemplate>
答案 0 :(得分:2)
我相信你可能会做这样的事情:
<EditItemTemplate>
<asp:RequiredFieldValidator ID="rfRoles" runat="server" ErrorMessage="Role Required"
ControlToValidate="ddlRole" ValidationGroup="roles<%# Eval("Id") %>" InitialValue="-1" Display="Dynamic" SetFocusOnError="true" Text="*">
</asp:RequiredFieldValidator>
<asp:ValidationSummary ID="validateRole" runat="server" ShowMessageBox="True" ShowSummary="false" ValidationGroup="roles<%# Eval("Id") %>" />
<asp:LinkButton ID="lnkSave" runat="server" Text="Save" CommandName="Update" CausesValidation="true" ForeColor="#AE0917"ValidationGroup="roles<%# Eval("Id") %>" Font-Bold="true"></asp:LinkButton>
</EditItemTemplate>
其中“Id”是数据行的标识符,例如您正在编辑的数据行的主键。这样,您为每一行提供一个唯一的验证组。
P.S。语法可能需要一些工作,我是从内存中完成的。