Validation Asp.Net MVC:执行子请求失败。有关详细信息,请检查InnerException

Validation Asp.Net MVC:执行子请求失败。有关详细信息,请检查InnerException,validation,asp.net-mvc-2,Validation,Asp.net Mvc 2,我收到以下错误消息 公共操作方法“RenderMenu” 在控制器上找不到 “Web.Controllers.SiteController” 然而,这个动作确实存在,控制器也确实存在(因为它在站点的任何地方都可以工作),我查看了内部异常 执行子请求失败。 请检查InnerException是否存在异常 更多信息 (这是内部异常…) 堆栈跟踪 在 System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap[TResult]

我收到以下错误消息

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

然而,这个动作确实存在,控制器也确实存在(因为它在站点的任何地方都可以工作),我查看了内部异常

执行子请求失败。 请检查InnerException是否存在异常 更多信息

(这是内部异常…)

堆栈跟踪

在 System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap[TResult](函数'1 func)at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler 处理程序,文本编写器,布尔值 preserveForm,布尔设置PreviousPage, 虚拟路径 文件路径,字符串physPath,异常 错误,字符串queryStringOverride)

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

<% Html.RenderAction("RenderMenu", "Site"); %>
当有新用户时,它可以正常工作,但是如果有人输入了一封已经存在的电子邮件,我们就会收到上面的错误。这种渲染方法适用于整个站点(这是我们添加的第一个表单)

有什么建议吗?

已修复:

RenderAction()方法如下所示

        [HttpGet]
        public ActionResult RenderMenu()
        {
            //Do Stuff
        }
删除HttpGet属性已解决该问题

        public ActionResult RenderMenu()
        {
            //Do Stuff
        }

想知道原因吗?

这是因为您的父请求是一个
[HttpPost]
,子请求与父请求使用相同的动词。如果您的方法被标记为
[HttpGet]
,它将不会响应
[HttpPost]
请求。直接通过浏览器点击该操作是有效的,因为这是一个
GET
。在
POST
上下文中作为子操作点击该操作将不起作用。

Hmm。。。您不应该使用渲染。我知道这很好,但有了这一点,你的观点就是行动。因此,您没有正确的流程。正确的解决方案是,在“基本”控制器中添加一个代码,将MenuModel作为惰性添加到ViewData中。在RenderPartial(“MenuView”,ViewData[“MenuModel”]),因为如果您有Get属性,它将只允许Get请求。但如果有post请求,则无法找到该方法。我的想法是,如果它成功了,您重定向到另一个操作(使用get),但是当它失败时,它应该显示post请求,因此搜索接受post的菜单方法。有类似的问题。添加[HttpPost]没有任何帮助,但删除[HttpGet]却有帮助。为什么?
        public ActionResult RenderMenu()
        {
            //Do Stuff
        }