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