2009-10-20 1 views
1

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

ответ

0

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

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

Там действительно два различных сценария вы должны обращаться:

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

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

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

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

+0

Спасибо за подробный ответ. Я весьма признателен. – sajoshi