Вопрос

Я использую AjaxSubmit для публикации формы, и проверки на стороне сервера выполняются с использованием XVal (способ RuleException).Я не использую метод try/catch, чтобы добавить ошибку в модель, а затем отправить ее на просмотр.Вместо этого я хочу использовать атрибут HandleError и в OnException я добавляю ошибки в модель.Основная проблема заключается в том, как мне получить эти ошибки в результате вызова Ajax?

Это было полезно?

Решение

На данный момент не существует хорошего встроенного решения.Для правильного выполнения этого действия требуется среда проверки на стороне клиента (поскольку для отображения ошибок необходимо динамически изменять HTML-страницу), а в ASP.NET MVC до недавнего времени ее не было.Однако в ASP.NET MVC 2 Preview 2 появилась проверка на стороне клиента, поэтому разумно предположить, что в ближайшее время что-то может быть встроено в платформу.

Однако пока HandleErrorAttribute вам не поможет.HandleErrorAttribute знает только, как перенаправить на страницу с ошибкой, а это, как правило, не то, что вы хотите делать в ответ на ошибку проверки на стороне сервера, даже с «обычным» POST и уж точно не с сообщением AJAX.

На самом деле вам нужно справиться с двумя разными сценариями:

  1. Ошибки валидации не являются катастрофическими сбоями;это просто плохие пользовательские данные, чего и следовало ожидать.Вам просто нужно вернуть информацию на страницу, чтобы ее можно было разметить и сообщить пользователю, как исправить свои данные.
  2. Вам также необходимо обрабатывать катастрофические сбои, например непредвиденные исключения.Это похоже на то, что делает HandleErrorAttribute, поскольку вы можете отобразить сообщение пользователю, но вы не можете обязательно сопоставить это сообщение с определенными полями на вашей странице.

Чтобы обработать первый сценарий ошибки, вам необходимо обернуть состояние модели в объект, который можно будет анализировать в коде JavaScript;JSON здесь явно подходит.Затем вам понадобится код JavaScript на стороне клиента, который анализирует этот объект и размечает поля формы.Это будет проще, если вы подключитесь к существующей платформе проверки на стороне клиента, которая уже содержит код для разметки полей формы.

Чтобы обработать второй тип ошибок, вы можете расширить HandleErrorAttribute, чтобы предоставить JSON вместо HTML в случае катастрофического сбоя.Опять же, вам нужно будет написать код JavaScript, который будет выполняться в случае сбоя — глобальный код jQuery. ajaxError Здесь полезно событие, которое обнаруживает созданную вами структурированную информацию об ошибках и отображает какое-то полезное сообщение пользователю.

Если все это звучит немного запутанно, то так оно и есть, поэтому, возможно, имеет смысл подождать и посмотреть, что будет встроено, когда MVC 2 наконец будет выпущен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top