我收到以下错误消息,
公共操作方法'RenderMenu' 在控制器上找不到 'Web.Controllers.SiteController'。
然而,这个动作确实存在并且控制器确实存在(因为它在网站上的任何地方工作)我查看了内部异常。
执行子请求失败。 请检查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路径,VirtualPath filePath,String physPath,Exception error,String 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方法适用于整个网站(这是我们添加的第一个表格)
有什么建议吗?
答案 0 :(得分:9)
修正:
RenderAction()方法在
之下 [HttpGet]
public ActionResult RenderMenu()
{
//Do Stuff
}
删除HttpGet属性已解决了该问题。
public ActionResult RenderMenu()
{
//Do Stuff
}
很想知道为什么?
答案 1 :(得分:-1)
这是因为您的父请求是[HttpPost]
,并且子请求的操作与父操作的动词相同。如果您的方法标记为[HttpGet]
,则它不会响应[HttpPost]
个请求。直接通过浏览器点击操作是有效的,因为它是GET
。在POST
的上下文中将操作作为子操作命中将不起作用。