ASP.NET MVC 2 JQuery POST не отображает ошибки состояния модели - PullRequest
0 голосов
/ 29 марта 2010

Я немного использовал asp.net mvc (но я все еще новичок). Я хочу иметь возможность обновить два представления в результате обратной передачи jquery.

В основном у меня есть список и подробный вид. Подробное представление представлено с помощью всплывающего окна jquery (с помощью всплывающего окна jquery-UI). Я хочу обновить список только в том случае, если сохранение данных выполнено успешно (т.е. в окне просмотра сведений нет ошибок проверки). Однако, если в представлении сведений есть какие-либо ошибки проверки, я хочу обновить представление сведений, чтобы пользователь мог видеть ошибки проверки.

поэтому я подумал, что в моем контроллере я возвращаю JsonResult вместо View.

[HttpPost]
public ActionResult SavePersonInfo(Person p) {
    if(ModelState.Valid) {
        return View("PersonList");
    }

    return Json({Error = true, View = PartialView("PersonDetails", p)});
}

Как вы видите, если нет ошибок, я возвращаю представление списка людей, но если есть какие-либо ошибки проверки, я возвращаю представление подробностей. Причина, по которой я возвращаю JsonResult, заключается в том, что мне нужно сообщить моему представлению об ошибке, чтобы представление (jquery) знало, какой раздел обновлять (например, нужно ли обновлять список людей 'div' или всплывающее диалоговое окно 'div «).

Итак, на мой взгляд, jquery выглядит следующим образом (пожалуйста, предположим, что есть форма для ввода информации о человеке и функция «SubmitPersonForm ();» вызывается при нажатии на кнопку «Сохранить»):

<script type="text/javascript>
    $('#btnSave').click(function (event) {
            onBegin();

            $.ajax(
            {
                type: "POST",
                url: "/Person/Save",
                data: $('form').serialize(),
                success: function (result) {
                 if(result.Error) {
                        $('#dvDetails').html($(result).View));
                    }
                    else {
                        $('#dvPersonList').html($result);
                    }  
                }
            });
        });
</script>

Итак, проблема, с которой я столкнулся сейчас, заключается в том, что когда возникает ошибка проверки, я вижу правильное обновление div, но я теряю сообщения проверки asv.net mvc. Я не вижу ошибок валидации в красном, как будто ASP.NET MVC полностью их игнорирует. Тем не менее, мой ModelState имеет эти ошибки, просто не отображаются в подробном представлении. У меня есть сводка проверки и операторы Html.ValidationFor (m => ...), помещенные в мое представление сведений.

Может кто-нибудь сказать мне, почему я не вижу ошибок проверки? хотя я использую JSonResult, я использую свойство right, которое является допустимым представлением, когда я отображаю 'dvDetails'. Я делаю что-то, что я не должен делать в asp.net mvc? Кстати, я использую asp.net mvc2 RC с Visual Studio 2010 RC.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2011

ASP.NET MVC код обрабатывает ответ для отображения ошибок проверки, сохраненных в ModelState во время обратной передачи. Поскольку вы используете Ajax Post, код обратной передачи не перестраивает страницу и не отображает ошибки проверки. Если вы хотите отобразить ошибки валидации, вы должны устранить их самостоятельно.

Я сделал это, передавая ошибки ModelState в виде массива в ответе. Я обрабатываю свой ответ Ajax, чтобы обновить заполненные элементы ошибки проверки в форме соответствующими сообщениями об ошибках в ответе.

Предупреждение: ключи в ModelState могут изменить свой регистр, поэтому строка идентификатора элемента в форме не совсем соответствует строке, используемой для ключа. ModelStateDictionary нечувствителен к регистру, но идентификаторы DOM - нет.

0 голосов
/ 31 марта 2010

URL не совпадает с именем действия ... не уверен, что вы, возможно, вызываете неправильный метод на контроллере ... просто идея. : -)

...