Asp.Net MVC: не удалось выполнить дочерний запрос. Пожалуйста, ознакомьтесь с InnerException для получения дополнительной информации
Я получил следующее сообщение об ошибке
публичный метод действия "RenderMenu" не найден на контроллере Веб.Контроллеры.Классе sitecontroller'.
однако это действие существует, и контроллер существует (поскольку он работает везде на сайте), я посмотрел на внутреннее исключение.
не удалось выполнить дочерний запрос. Пожалуйста, проверьте InnerException для больше информация.
(это внутреннее исключение...)
Трассировка Стека
at Система.Сеть.В MVC.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Обернуть[TResult] (Func ' 1 func) at Система.Сеть.HttpServerUtility.ExecuteInternal(IHttpHandler обработчик, TextWriter писатель, логический preserveForm, Boolean setPreviousPage, VirtualPath путь, VirtualPath filePath, String physPath, исключение ошибка, строка queryStringOverride)
теперь у нас есть настройка веб-сайта с динамической системой меню, поэтому мы используем RenderAction() на общем контроллере для создания этой системы меню.
<% Html.RenderAction("RenderMenu", "Site"); %>
этот вызов выполняется с MasterPage, и он работает нормально, пока не возникла ошибка проверки, например,
[HttpPost]
public ActionResult Register(UserModel UserToAdd)
{
if(!ModelState.IsValid)
{
return View(UserToAdd);
}
//Run some validation
if (_UserService.DoesEmailExist(UserToAdd.EMail))
{
TempData["error"] = "Email Address Already in use!";
return View(UserToAdd);
}
//Add the user
TempData["info"] = "User Added - " + UserO.ID;
return View("Success");
}
Он отлично работает, когда есть новый пользователь, но если кто-то вводит электронное письмо, которое уже существует, мы получаем вышеуказанную ошибку. Этот метод RenderAction работает все над сайтом (это первая форма, которую мы добавили)
какие предложения?
2 ответов
исправлено:
метод RenderAction () ниже
[HttpGet]
public ActionResult RenderMenu()
{
//Do Stuff
}
удаление атрибута HttpGet разрешило проблему.
public ActionResult RenderMenu()
{
//Do Stuff
}
хотелось бы знать, почему?
Это потому, что ваш родительский запрос [HttpPost]
, и дочерний запрос работает в том же глаголе, что и родительский. Если ваш метод отмечен как [HttpGet]
, он не ответит [HttpPost]
запросы. Нажатие действия непосредственно через ваш браузер работает, потому что это GET
. Попадание в действие как дочернее действие в контексте POST
не будет работать.