Asp.Net MVC: Не удалось выполнить дочерний запрос.Пожалуйста, изучите InnerException для получения дополнительной информации. - PullRequest
6 голосов
/ 09 июля 2010

Я получаю следующее сообщение об ошибке:

Метод открытого действия 'RenderMenu' не найден в контроллере 'Web.Controllers.SiteController'.

Однако это действие существует, и контроллер существует (так как он работает везде на сайте) Я рассмотрел внутреннее исключение.

Не удалось выполнить дочерний запрос.Пожалуйста, изучите InnerException для получения дополнительной информации.

(Это внутреннее исключение ...)

Трассировка стека

на System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap [TResult] (Func`1 func) в System.Web.HttpServerUtility.ExecuteInternal (обработчик IHttpHandler, писатель TextWriter, логический метод preserveForm, логическая переменная pathathath, виртуальная переменная запроса пути к файлу)

Теперь у нас есть настройка веб-сайта с динамической системой меню, поэтому мы используем 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 ]

9 голосов
/ 09 июля 2010

Исправлено:

Метод RenderAction () ниже

        [HttpGet]
        public ActionResult RenderMenu()
        {
            //Do Stuff
        }

Удаление атрибута HttpGet решило проблему.

        public ActionResult RenderMenu()
        {
            //Do Stuff
        }

Хотелось бы знать, почему?

0 голосов
/ 25 сентября 2014

Это потому, что ваш родительский запрос - [HttpPost], а дочерний запрос работает в том же глаголе, что и родительский.Если ваш метод помечен как [HttpGet], он не будет отвечать на [HttpPost] запросы.Нажатие на действие прямо через ваш браузер работает, потому что это GET.Нажатие на действие как дочернее действие в контексте POST не будет работать.

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