ASP CustomValidator, переход к обратной передаче после ошибки

У меня есть страница 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 проходят успешно, и она работает нормально.

Я пробую пользовательский валидатор:

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

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

Но страница постоянно переходит к постбэку, даже после показа предупреждения «недействительно»… Есть мысли? Спасибо!


person naruu    schedule 25.10.2010    source источник
comment
попробуйте переименовать validate() во что-то другое?   -  person IrishChieftain    schedule 25.10.2010
comment
пробовал validate2()... не работает ;/   -  person naruu    schedule 25.10.2010


Ответы (3)


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

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

   alert('Not valid!');
   arguments.IsValid=false;
}
person Jason Berkan    schedule 25.10.2010
comment
обычно вы не будете использовать alert в функции проверки - для этого предназначены свойства Text или ErrorMessage. - person lincolnk; 25.10.2010
comment
@линкольк - Верно. Я просто копировал пример в вопросе и модифицировал его, чтобы показать, как вы устанавливаете проверку в состояние сбоя. - person Jason Berkan; 25.10.2010
comment
Я просто использовал предупреждение в качестве примера (и помощника по отладке). Раньше я использовал метки и стили (с javascript)... Тогда попробую эти атрибуты (текст, ErrorMessage)... Спасибо. - person naruu; 26.10.2010

как писал @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;

    }
person ZoharAdar    schedule 29.10.2012

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

 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
            }
        }
person lumayara    schedule 27.06.2017