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.



Кто-нибудь знает, как я могу этого достичь?



Спасибо.

550   2  

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

    Ничего не найдено.