ASP CustomValidator, переход на обратную передачу после ошибки - PullRequest
2 голосов
/ 25 октября 2010

У меня есть страница ASP .NET с валидаторами ASP (Обязательное поле, Регулярное выражение, ...) и функциями сценариев Java для дополнительной проверки (например, для проверки, если вторая дата больше первой, среди прочих).

Я обычно делаю:

<script type="text/javascript">

    function validate() {
        // ...
        alert('Not valid!');
        return false;
    }    
</script>


<asp:Button ID="Button1" runat="server" Text="Add" 
            OnClientClick="return validate();" OnClick="Button1_Click" />

Итак, кнопка переходит к обратной передаче, если проверка asp и javascript прошла успешно, и она работает нормально.

I'mопробовать пользовательский валидатор:

<asp:CustomValidator ID="CustomValidator1" 
EnableClientScript="true" runat="server" ControlToValidate="TextBox1" 
ClientValidationFunction="validate();" >
</asp:CustomValidator> 

(также пробовал с ClientValidationFunction = "return validate ();")

Но страница постоянно продвигается к обратной передаче, даже после показа «не действителен »оповещение ... Есть мысли?Спасибо!

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

При использовании CustomValidator функция проверки на стороне клиента должна принимать параметр source и arguments . Затем, чтобы отметить проверку как неудачную, вы устанавливаете arguments.IsValid в false. Вот страница MSDN для CustomValidator .

function validate(source, arguments) {
   // ...

   alert('Not valid!');
   arguments.IsValid=false;
}
0 голосов
/ 27 июня 2017

Я решил эту проблему, создав переменную:

 Boolean fieldIsValid = true;

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

if(args.IsValid == false)
            {
                fieldIsValid = false;
            }
            else
            {
                fieldIsValid = true;
            }

Затем я также добавил это в метод отправки клика:

protected void submit_Click(object sender, EventArgs e)
        {
            if (fieldIsValid)
            {
                //submit my things
            }
        }
0 голосов
/ 29 октября 2012

Как писал @Jason, при использовании клиента CustomValidator исключаются параметры источника и аргументов.краткий пример использования на стороне клиента и сервера с CustomValidator.

Использование CustomValidator ClientValidationFunction и OnServerValidate свойства:

<asp:CustomValidator ID="cvCreditCard"  runat="server" ErrorMessage="Error Message"  ControlToValidate="txtCardNumber" ClientValidationFunction="Validators.CardNumber" OnServerValidate="ValidateCreditCardValid">*</asp:CustomValidator>

Проверка на стороне клиента:

var Validators = {
CardNumber: function (source, clientside_arguments) {

    var valid_val = true;
    var txtCardNumber = clientside_arguments.Value; //(return the ControlToValidate value)

    //make your checks here

    clientside_arguments.IsValid = valid_val;
}}

проверка на стороне сервера:

protected void ValidateCreditCardValid(object sender, ServerValidateEventArgs e)
    {
       //make your checks here            
       e.IsValid = false;

    }
...