Обязательное поле валидатора не работает - PullRequest
3 голосов
/ 01 ноября 2010

Я использовал обязательный валидатор поля с последующим валидатором регулярного выражения, но обязательный валидатор поля не работает .....

<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px"
    CssClass="txtStyle" Font-Names="Arial" MaxLength="1000" 
    ValidationGroup="Valtxt" TabIndex="2" Rows="4">
</asp:TextBox>

<asp:RegularExpressionValidator ID="regValSummary" runat="server"
    ControlToValidate="txtSummary" Display="Dynamic"
    ValidationExpression="[^&lt;&gt;&amp;#!]*" ValidationGroup="Valtxt">
        Invalid characters(&lt;&gt;&amp;#!) are not allowed
</asp:RegularExpressionValidator>

<asp:RequiredFieldValidator ID="reqvalSummary" runat="server"
    ControlToValidate="txtSummary" ErrorMessage="Summary is required"
    ValidationGroup="Valtxt" Display="Dynamic">
</asp:RequiredFieldValidator>

Может кто-нибудь видит проблему ???

Ответы [ 4 ]

6 голосов
/ 01 ноября 2010

RequiredFieldValidator запускается клиентским событием onchange.Звучит так, как будто вы ожидаете, что оно будет вызвано событием onblur, так что вкладка вдали от текстового поля вызовет проверку.

Прежде чем перейти к этому, я подозреваю, что это то, что вы видите, ичтобы убедиться, что он действительно работает, вам нужно вызвать onchange.Для этого введите текст в текстовое поле, уберите вкладку, вернитесь к нему, очистите текстовое поле и снова уберите вкладку.Теперь вы должны увидеть сообщение об ошибке RequiredFieldValidator, поскольку его содержимое изменилось на .

. Возврат к проблеме onblur.Чтобы выполнить это поведение, вы можете добавить атрибут onblur в свой код и заставить его вызывать метод JavaScript ValidatorValidate(...) следующим образом:

void Page_Load(object sender, EventArgs e)
{
    txtSummary.Attributes.Add("onblur", "ValidatorValidate(" + reqvalSummary.ClientID + ")");
}

В качестве альтернативы, вы можете выполнить то же самое в разметке.Во-первых, добавьте этот блок сценария:

<script type="text/javascript">
    function rfvBlur() {
        var rfv = document.getElementById("<%= reqvalSummary.ClientID %>");
        ValidatorValidate(rfv);
    }    
</script>

Во-вторых, обновите разметку <asp:TextBox.../>, добавив onblur="rfvBlur()", чтобы она теперь выглядела так:

<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px" CausesValidation="true"
            CssClass="txtStyle" Font-Names="Arial" MaxLength="1000" ValidationGroup="Valtxt"
            TabIndex="2" Rows="4" onblur="rfvBlur()" />

Еще одна опциячтобы проверить всю группу ValidationGroup, добавив следующий атрибут в разметку <asp:TextBox.../> (дополнительный блок скрипта не требуется):

onblur="Page_ClientValidate('Valtxt')"
3 голосов
/ 23 января 2014

Добавление этой строки в <appSettings> раздел web.config работало для меня (у меня была проблема, когда все валидаторы перестали работать при обновлении проекта до .NET 4.5):

<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />

Источник:

http://forums.asp.net/t/1876231.aspx?ASP+Net+4+5+Validation+Controls+not+working+with+AJAX+ToolkitScriptManager1

1 голос
/ 01 ноября 2010

Почему бы вам не изменить регулярное выражение валидатора "RegEx", чтобы проверить, является ли текстовое поле пустым вместо использования другого валидатора?

В любом случае, вероятно, вы не указали ValidationGroup = "Valtxt" для кнопки или элемента управления, которые вызывают обратную передачу. Просто добавьте ValidationGroup = "Valtxt" к кнопке или серверному элементу управления, которые поднимают сообщение на страницу

0 голосов
/ 06 января 2011
<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px"
    CssClass="txtStyle" Font-Names="Arial" MaxLength="1000" 
    TabIndex="2" Rows="4">
</asp:TextBox>

<asp:RegularExpressionValidator ID="regValSummary" runat="server"
    ControlToValidate="txtSummary" ErrorMessage="Invalid characters(&lt;&gt;&amp;#!) are not allowed" Text="*"
    ValidationExpression="[^&lt;&gt;&amp;#!]*" ValidationGroup="Valtxt">

</asp:RegularExpressionValidator>

<asp:RequiredFieldValidator ID="reqvalSummary" runat="server"
    ControlToValidate="txtSummary" ErrorMessage="Summary is required" Text="*"
    ValidationGroup="Valtxt">
</asp:RequiredFieldValidator>
...