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 не будет работать.