ASP.NET: RequiredFieldValidator с несколькими текстовыми полями в ListView
У меня есть ListView
<asp:ListView ....>
<asp:TextBox ID="txtComment" ... />
<asp:RequiredFieldValidator ID="rfvComment" ControlToValidate="txtComment" ... />
<act:ValidatorCalloutExtender ID="vceComment" TargetControlID="rfvComment" ... />
<asp:Button ID="btnAddComment" ... />
</asp:ListView>
Предположим, что этот ListView создает следующее:
TextBox1
Button1
TextBox2
Button2
TextBox3
Button3
Если я нажимаю на элемент button2 в RequiredFiledValidator/ValidatorCalloutExtender применяются в текстовое поле textbox1 вместо элемента textbox2, если я нажимаю на кнопки button3 на RequiredFiledValidator/ValidatorCalloutExtender применяются в текстовое поле textbox1, а также, я хочу, чтобы RequiredFiledValidator/ValidatorCalloutExtender обратиться в текстовое поле рядом с кнопкой, поэтому, если я нажму кнопку Button3, я хочу, чтобы она применялась к TextBox3.
Кто-нибудь знает, как я могу этого достичь?
Спасибо.
2 ответов:
Используйте свойство ValidationGroup и генерируйте его значение динамически:
<asp:TextBox runat="server" ID="TextBox1" /> <asp:RequiredFieldValidator runat="server" ControlToValidate="TextBox1" Text="*" ValidationGroup='<%# "validationGroup_" + Container.DataItemIndex.ToString() %>' /> <asp:Button runat="server" Text="Click Me" ValidationGroup='<%# "validationGroup_" + Container.DataItemIndex.ToString() %>' />Добавить скрипт ниже в самом низу формы:
<script type="text/javascript"> var originalValidatorUpdateDisplay = ValidatorUpdateDisplay; ValidatorUpdateDisplay = function (val) { originalValidatorUpdateDisplay.call(null, val); var isHidden = val.style.display == "none" || val.style.visibility == "hidden"; var extender = Sys.UI.Behavior.getBehaviorsByType(val, Sys.Extended.UI.ValidatorCalloutBehavior); if (extender && extender.length == 1) { extender = extender[0]; if (isHidden) { extender.hide(); } else { extender.show(true); } } } </script>Я полагаю, что было бы лучше настроить toolkit source, но я не в настроении делать это :) так что надеюсь, что этот скрипт исправит вашу проблему
Попробуйте что-то вроде (пример, это должно сработать)
<asp:Panel ID="registration" defaultbutton="regButton" runat="server"> <asp:TextBox ID="name" Rows="1" CssClass="text" runat="server" ValidationGroup="Registration"> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Enter your name please" Text="*" ControlToValidate="name" EnableClientScript="False" Display="Dynamic" ValidationGroup="Registration" /> <asp:TextBox ID="address" Rows="1" CssClass="text" runat="server" ValidationGroup="Registration"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Enter your address please" Text="*" ControlToValidate="address" EnableClientScript="False" Display="Dynamic" ValidationGroup="Registration" /> <asp:ValidationSummary DisplayMode="BulletList" EnableClientScript="false" ID="validation_sum" runat="server" HeaderText="Errors list" ValidationGroup="Registration"/> <asp:Button runat="server" id="regButton" Text="Register please" ValidationGroup="Registration" OnClick="RegisterUser"/> </asp:Panel>
Comments