Как получить ошибки модели в AjaxSubmit?
Я использую AjaxSubmit для отправки формы, и существуют проверки на стороне сервера, выполненные с использованием XVal (способ RuleException). Я не использую способ try/catch, чтобы добавить ошибку в модель, а затем отправить для просмотра. Вместо этого - я хочу использовать атрибут HandleError, а в OnException я добавляю ошибки в Model. Основная проблема заключается в том, как получить эти ошибки в результате Ajax Call?
1 ответ
В данный момент нет хорошего решения. Для этого требуется клиентская структура проверки (потому что для отображения ошибок необходимо динамически изменять HTML-страницу), и до недавнего времени в ASP.NET MVC такого не было. Однако в ASP.NET MVC 2 Preview 2 была введена проверка на стороне клиента, поэтому разумно предположить, что что-то может быть встроено в среду в ближайшее время.
В то же время, HandleErrorAttribute вам не поможет. HandleErrorAttribute знает только, как перенаправить на страницу с ошибкой, что, как правило, не то, что вы хотите сделать в ответ на ошибку проверки на стороне сервера, даже с "обычным" POST, и, конечно, не с сообщением AJAX.
Там действительно два разных сценария, которые вы должны обработать:
- Ошибки валидации не являются катастрофическими сбоями; это просто плохие пользовательские данные, которые вы должны ожидать. Вам просто нужно вернуть информацию обратно на страницу, чтобы страницу можно было разметить, чтобы сообщить пользователю, как исправить свои данные.
- Вам также необходимо обрабатывать катастрофические сбои, такие как непредвиденные исключения. Это похоже на то, что делает HandleErrorAttribute, поскольку вы можете отображать сообщение пользователю, но вы не можете обязательно сопоставить это сообщение с конкретными полями на вашей странице.
Чтобы обработать первый сценарий ошибки, вам нужно обернуть состояние модели в объект, который будет разбираться в коде JavaScript; JSON - это очевидная подгонка здесь. Затем вам нужно иметь JavaScript-код на стороне клиента, который анализирует этот объект и размечает поля формы. Это проще, если вы привязываетесь к существующей клиентской платформе проверки, которая уже содержит код для разметки полей формы.
Чтобы обработать второй тип ошибки, вы можете расширить HandleErrorAttribute, чтобы обеспечить JSON вместо HTML в случае катастрофического сбоя. Опять же, вам нужно будет написать код JavaScript, который будет выполняться в случае сбоя - глобальный jQuery ajaxError
Здесь полезно событие - оно обнаруживает созданную вами структурированную информацию об ошибке и отображает какое-то полезное сообщение для пользователя.
Если все это звучит немного сложным, то это так, поэтому может иметь смысл подождать и посмотреть, что будет встроено, когда MVC 2 будет наконец выпущен.