2014-01-22 4 views
0

У меня есть страница с двумя путями отправки; SaveAndContinue и SaveAndExit. Они точно такие же, за исключением класса CSS и действия контроллера.Ошибка проверки на стороне клиента ASP.Net MVC - работа для одной кнопки, но не другая

Первый, SaveAndContinue будет корректно проверять клиентскую сторону, и он не будет отправляться на контроллер, если ModelState.IsValid является ложным. В то время как второй полностью пропустит проверку на стороне клиента и отправит на контроллер с ModelState.IsValid будет ложным.

Я использую стандартную проверку аннотаций данных, и ничто другое не является особенным. Нет функций jQuery/AJAX.

У кого-нибудь есть предложения, почему кто-то будет работать, а другой нет?

Я использую MVC 3, jQuery.validate, jQuery.validate.unobtrusive.

благодарит заранее.

+0

Есть обе кнопки типа submit? – Marko

+1

А что именно не работает? Что бы вы хотели? – Marko

+1

Да, обе кнопки представляют и точно такие же, за исключением класса CSS и действия контроллера. Вторая кнопка не проверяет на стороне клиента, прежде чем нажать на контроллер, тогда как первая -. Я хочу, чтобы они оба вели себя одинаково или, по крайней мере, понимали, почему они этого не делают. – marjoh

ответ

0

Являются ли кнопки отправки содержащимися в разных формах? Если кнопка отправки не находится в форме, содержащей входные данные, которые не прошли проверку, то сообщение будет происходить без ошибок на стороне клиента.

+0

Это интересная информация Джейсона, спасибо. Однако я могу подтвердить, что они оба в одной форме. – marjoh

+0

Я все еще могу уловить проверку в контроллере обычным способом 'ModelState.IsValid', поэтому у меня есть работа. Я просто хочу понять, почему это не происходит на стороне клиента для этой второй кнопки. Например, есть ли какая-то автоматическая настройка кнопки, которая запускает проверку на клиенте для первой кнопки, которая должна быть явно настроена для второй кнопки? – marjoh

0

Ответ был найден (спасибо Ошу), и он оглядел меня в лицо.

Один из классов CSS, используемых второй кнопкой, был классом 'cancel', что само по себе не помогло.

Однако функция Validate в jquery.validate-vsdoc.js специально проверяет, является ли 'submitHandler' это кнопка с классом '.cancel', и если да устанавливает validator.cancelSubmit = истинного

this.find("input, button").filter(".cancel").click(function() { 

validator.cancelSubmit = true; 

}); 

Надеется, что это помогает кто-то другое. :-)