Проверка Javascript перезаписывает валидаторы ASP.NET - PullRequest
0 голосов
/ 18 октября 2011

У меня есть проблема, которая сводит меня с ума.На моей странице есть одна проверка Javascript и две проверки ASP.NET .Результат проверки зависит только от результата Javascript.Это означает, что если Javascript возвращает true , валидаторы ASP.NET не проверяются.

Код Javascript :Два ASP.NET валидаторы :

<td><asp:TextBox runat="server" ID="txtSerialNr" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtSerialNr" ErrorMessage="***" />
                        </td>

<td><asp:TextBox runat="server" ID="txtProdName" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfv1" ControlToValidate="txtProdName" ErrorMessage="***"></asp:RequiredFieldValidator></td>

Кто-нибудь может помочь?Спасибо

ОБНОВЛЕНИЕ:

Я вызываю Javascript с кнопки:

    <asp:Button runat="server" ID="btnSubmit" Text="Save New Product" 
style="cursor:hand" OnClick="btnSubmit_Click" />

Но я регистрирую атрибут из кода :

protected void Page_Load(object sender, EventArgs e)
{
    btnSubmit.Attributes.Add("OnClientClick", "return Validate()");
}

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Вы можете запустить проверку на стороне клиента из функции Validate():

validate = function(){
    bool isValid = Page_ClientValidate(""); //triggers validation
    if (isValid){
        var ddlObj = document.getElementById("<%=ddStatus.ClientID%>"); 
        var txtObj = document.getElementById("<%=txtComment.ClientID%>"); 
        if (ddlObj.selectedIndex != 0) { 
            if (txtObj.value == "") { 
                alert("Any change of Status requires a comment!"); 
                txtObj.focus(); 
                isValid = false; 
            } 
        } 
    }
    return isValid;
}

Разметка:

<asp:Button runat="server" OnClientClick="return validate();" ... />
1 голос
/ 18 октября 2011

Хорошо, здесь есть пара неправильных вещей.

Если вы достаточно заинтересованы в проверке, вы должны ВСЕГДА выполнять проверку на стороне сервера в дополнение к проверке на стороне клиента. Проверка на стороне клиента очень удобна и быстро реагирует, но ее можно обойти, просто отключив JavaScript!

Я не вижу, где вы указали своим элементам управления, какую функцию JavaScript вызывать при проверке? Вы используете RequiredFieldValidators, который не требует внешней функции, но затем попытаетесь выполнить пользовательскую проверку с использованием вашей функции Validate().

Если вы do в конечном итоге используете CustomValidator, то вам нужно изменить «подпись» вашей функции. Это должно быть в форме

   function validateIt(sender, args){
            var testResult = //your validation test here
            args.IsValid = testResult;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...