Html.RenderAction не может найти действие в контроллере в MVC2 для недопустимого ModelState - PullRequest
2 голосов
/ 04 января 2011

У меня есть PersonController и представление с именем «Добавить» в папке «Персона» в «Представлениях».

Представление «Добавить» принимает заголовок, имя, фамилию и номер телефона.Название представляет собой выпадающий список с предварительно заполненными значениями.Чтобы получить этот выпадающий список, я вызываю

<% Html.RenderAction("Titles", "Person");

Когда вызывается это действие, он возвращает PartialView.PartialView - это раскрывающийся список предварительно сконфигурированных заголовков.

Сценарий:

У меня есть два действия контроллера с именем «Добавить» (одно получение и одно сообщение).В HttpGet он загружает пустую форму, по существу, с выпадающим списком заголовков, пустыми текстовыми полями и т. Д. Когда пользователь нажимает кнопку загрузки, он вызывает «Добавить» HttpPost.Внутри этого действия я делаю некоторую проверку валидации, проверяя, заполнили ли они обязательные поля и т. Д. Если поля не заполнены, я добавляю ошибку в ModelState:

if(string.IsNullOrEmpty(firstName))
{
     ModelState.AddModelError("person", "Person first name is required.");
}

Если состояние модели неvalid, я возвращаю View, чтобы пользователь мог видеть сообщения об ошибках валидации.

Действие корректно отображается при условии, что ModelState действителен, если возникает ошибка, и я добавляю ошибку вModelState и возвращение View из действия HttpPost, HttpException генерируется при отображении:

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.

Сообщая мне, что действие с именем "Titles" не может быть найдено на контроллере "Person".Очевидно, я знаю, что он там есть, потому что он выполнялся очень хорошо, пока в ModelState не было ошибок.

Есть идеи?

1 Ответ

0 голосов
/ 12 января 2017

Дочернее действие будет вызываться с использованием того же метода HTTP, что и основное действие, которое было вызвано первым.

Таким образом, я предполагаю, что вы [HttpGet] отмечены на вашем /Person/Titles действии. Если вы удалите это, оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...