Asp.Net MVC:子请求的执行失败.请查看InnerException以获取更多信息

Lia*_*amB 6 validation asp.net-mvc-2

我收到以下错误消息,

在控制器'Web.Controllers.SiteController'上找不到公共操作方法'RenderMenu'.

但是这个动作确实存在并且控制器确实存在(因为它在网站上的任何地方工作)我查看了内部异常.

执行子请求失败.请查看InnerException以获取更多信息.

(这是内在的例外......)

堆栈跟踪

在System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap [TResult](Func`1 func)at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler,TextWriter writer,Boolean preserveForm,Boolean setPreviousPage,VirtualPath path,VirtualPath filePath,String physPath) ,异常错误,String queryStringOverride)

现在,我们有一个带有动态菜单系统的网站设置,所以我们在通用控制器上使用RenderAction()来构建这个菜单系统.

<% Html.RenderAction("RenderMenu", "Site"); %>
Run Code Online (Sandbox Code Playgroud)

此调用是从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");
        }
Run Code Online (Sandbox Code Playgroud)

当这是一个新用户时,它工作正常,但如果有人输入已存在的电子邮件,我们会收到上述错误.这个RenderAction方法适用于整个站点(这是我们添加的第一个表单)

有什么建议?

Lia*_*amB 9

固定:

RenderAction()方法如下

        [HttpGet]
        public ActionResult RenderMenu()
        {
            //Do Stuff
        }
Run Code Online (Sandbox Code Playgroud)

删除HttpGet属性已解决此问题.

        public ActionResult RenderMenu()
        {
            //Do Stuff
        }
Run Code Online (Sandbox Code Playgroud)

很想知道为什么?

  • 因为如果你有Get Attribute,它只允许获取请求.但是如果有一个帖子请求它找不到方法.我认为,如果它的成功,你重定向到另一个动作(使用get)但是当它失败时,它应该显示post请求,因此搜索接受post的菜单方法. (4认同)