Вызвать обязательное поле валидатора через JavaScript - PullRequest
7 голосов
/ 20 июня 2011

У меня есть нестандартная кнопка отправки в моей форме ASP.NET в соответствии с.

<a class="button" href="#" onclick="this.blur();SubmitForm();"><span>Submit</span></a>

Из-за этого мой обязательный валидатор поля не вызывается на стороне клиента. Как можно вызвать обязательный валидатор поля через Javascript?

В качестве альтернативы, есть ли лучший способ выполнить то, что я пытаюсь сделать?

Ответы [ 4 ]

11 голосов
/ 20 июня 2011

Для этого вы можете использовать встроенную клиентскую функцию с именем Page_ClientValidate. Проверьте следующий фрагмент кода для ссылки

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClientSide_Validation.aspx.cs"
    Inherits="ClientSide_Validation" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function performCheck() {

            if (Page_ClientValidate()) {
            }

        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lbl1" runat="server" Text="Please enter some value"></asp:Label>
        <asp:TextBox ID="txtbox1" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator ID="valReq" ControlToValidate="txtbox1" runat="server"
            ErrorMessage="*" Display="Dynamic">
        </asp:RequiredFieldValidator>
        <input type="button" id="btnValidate" value="Submit" onclick="performCheck()" />
        <a href="#" onclick="performCheck();">Validate</a>
    </div>
    </form>
</body>
</html>
8 голосов
/ 09 января 2013

Page_ClientValidate запускает проверку для всех валидаторов в форме, и, как показывает @ gilly3, вы также можете проверить их все, зациклив коллекцию и вызвав ValidatorValidate(validator)

Однако, если вы хотите проверить только один конкретныйзатем валидатор, вам нужно вызвать ValidatorValidate(validator) только для одного элемента.

Аргумент валидатора должен быть объектом DOM, который может быть сложно получить, потому что идентификатор элемента может в конечном итоге сильно отличаться от указанного в отметкевверх, если вы используете главные страницы или пользовательские элементы управления.

например

<asp:RequiredFieldValidator ID="rfvCampaignStartDate" runat="server" .../>

становится

<span id="cph_0_rfvCampaignFile" ...>

Я обошел это в одном из моих проектов с помощью jQueryподобный селектору

ValidatorValidate($('[id$="rfvCampaignFile"]').get(0));

ASP.NET только добавляет префиксы к идентификаторам, чтобы создать уникальное имя. Я мог бы использовать id$= часть селектора, чтобы соответствовать любым идентификаторам, оканчивающимся на "rfvCampaignFile", так как я написал сайт, который я знаюэто не будет конфликтовать с другими элементами управления.Наконец, я использую .get(0), чтобы вернуть ссылку на объект DOM на первый (и только в моем случае) соответствующий объект DOM.

3 голосов
/ 20 июня 2011

Взгляните на клиентский API для валидаторов ASP.Net . Все валидаторы на странице выставляются в Array через Page_Validators. Вы можете вызвать ValidatorValidate(validator) на одном валидаторе, чтобы вызвать его. Итак, чтобы вызвать все валидаторы на странице, вы можете:

Page_Validators.forEach(ValidatorValidate);

Кстати, чтобы использовать Array.forEach в старых браузерах , вам нужно расширить Array .

1 голос
/ 04 апреля 2013

Если вы используете jquery, тогда установите элемент управления ASP.NET ClientIDMode = "Static", и вы сможете сделать ваш код проще для чтения как:

ValidatorValidate($('#MyControl'));

или что-то очень похожее.

...