Почему ValidatorValidate () проверяет все элементы управления RequiredFieldValidator на странице? - PullRequest
3 голосов
/ 04 октября 2011

В следующем коде Почему ValidatorValidate(v) проверяет все элементы управления RequiredFieldValidator на странице? Он должен выполнять только RequiredFieldValidator1, а не RequiredFieldValidator2.
Вот код.

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript">
        function check() {

            var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
            ValidatorValidate(v);

        }
        </script>    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>

            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox2"></asp:RequiredFieldValidator>
            <br />
            <asp:Button ID="Button1" runat="server" OnClientClick="check()" Text="Check" />

        </div>

        </form>
</body>
</html>

Ответы [ 3 ]

7 голосов
/ 04 октября 2011

Вам необходимо вернуть что-то из check (), в противном случае он запускается, а затем проходит и выполняет обычную проверку страницы.

После вызова ValidatorValidate () вы можете проверить, действителен ли валидатор

function check() {

        var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
        ValidatorValidate(v);
if (v.isvalid)
     return true;
else
     return false;
}

У вас там тоже был дополнительный}.

Вам также нужно добавить возврат для OnClientClick

<asp:Button ID="Button1" runat="server" OnClientClick="return check()" Text="Check" />
2 голосов
/ 04 октября 2011

Ваш script поврежден.

<head>
    <script type="text/javascript">
         function check() {
             var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
             ValidatorValidate(v);
         }
   </script>    
</head>

В вашей версии вы получаете сообщение об ошибке JavaScript, что функция check не определена.

Второй валидатор также запускается, потому что Validator всегда запускается перед обратной передачей, а ваша функция check вызывается кнопкой подтверждения. Оба валидатора в любом случае будут проверять даже без вашего явного вызова на ValidatorValidate.

Если вы не хотите отправлять обратную запись по клику, используйте вместо нее HtmlButton:

<input type="button" onclick="check()" value="Check" />
2 голосов
/ 04 октября 2011

Это происходит потому, что когда вы нажимаете кнопку, это вызывает проверку всех из них при обратной передаче.Вам нужно сгруппировать их по ValidationGroup или использовать return false; из check(), чтобы остановить обратную передачу.

В качестве альтернативы вы также можете заменить RequiredFieldValidator на CustomValidator и выполнить условные проверки на основеваши потребности.

Если вы ДЕЙСТВИТЕЛЬНО хотите выполнить обработку валидатора на стороне клиента, ознакомьтесь с http://msdn.microsoft.com/en-us/library/yb52a4x0.aspx#ClientSideValidation_ClientValidationObjectModel

Эта страница содержит подробную информацию о модели объекта проверки клиента , в которой естьФункции JavaScript для обработки условной оценки.Проверьте Событие проверки для проверки на стороне клиента asp net , чтобы узнать, что один человек делал в этом направлении.

Что вы пытаетесь сделать конкретно?Возможно, кто-то может помочь вам получить правильные настройки.

...