Как получить ошибки модели в AjaxSubmit?
-
22-09-2019 - |
Вопрос
Я использую AjaxSubmit для публикации формы, и проверки на стороне сервера выполняются с использованием XVal (способ RuleException).Я не использую метод try/catch, чтобы добавить ошибку в модель, а затем отправить ее на просмотр.Вместо этого я хочу использовать атрибут HandleError и в OnException я добавляю ошибки в модель.Основная проблема заключается в том, как мне получить эти ошибки в результате вызова Ajax?
Решение
На данный момент не существует хорошего встроенного решения.Для правильного выполнения этого действия требуется среда проверки на стороне клиента (поскольку для отображения ошибок необходимо динамически изменять 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 наконец будет выпущен.