代码之家  ›  专栏  ›  技术社区  ›  LiamB

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

  •  6
  • LiamB  · 技术社区  · 14 年前

    我收到以下错误消息,

    在控制器上找不到 'Web.Controllers.SiteController'。

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

    执行子请求失败。 请检查InnerException 更多信息。

    (这是内部异常…)

    在 func)在 System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler) 虚拟路径,虚拟路径 文件路径,字符串physPath,异常

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

    <% Html.RenderAction("RenderMenu", "Site"); %>
    

    这个调用是从母版页发出的,在出现这样的验证错误之前,它工作正常,

     [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");
            }
    

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

    有什么建议吗?

    2 回复  |  直到 14 年前
        1
  •  10
  •   LiamB    11 年前

    固定的:

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

    删除HttpGet属性已经解决了这个问题。

            public ActionResult RenderMenu()
            {
                //Do Stuff
            }
    

    想知道为什么吗?

        2
  •  -1
  •   Meryovi Carlos    10 年前

    这是因为您的父请求是 [HttpPost] ,子请求的操作方式与父请求的操作方式相同。如果您的方法被标记为 [HttpGet] ,它不会响应 [HttpPost] GET POST 不起作用。