【问题标题】:Error executing child request for handler in view在视图中执行处理程序的子请求时出错
【发布时间】:2013-10-09 12:57:40
【问题描述】:

我有一个 MVC 4 视图,我在其中呈现以下操作

@{
    Html.RenderAction("Index", "Logo");
    Html.RenderAction("Index", "MainMenu");
}

我的视图上有一个表格,该表格已填写并发布到控制器。在控制器中,我执行一些任务,然后将模型发送回我的视图

[HttpPost]
public ActionResult Index(ManageAdministratorModel manageAdministratorModel)
{
     // I save some of the fields to the database here.
     return View(manageAdministratorModel);
}

当我被重定向到视图时,我收到以下错误

执行处理程序“System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper”的子请求时出错。

在这条线上

Html.RenderAction("Index", "Logo");

知道为什么会这样吗?

【问题讨论】:

  • 重要提示:错误消息作为引号而不是代码块更有效(我的编辑)
  • 谢谢你会记住这一点

标签: c# asp.net-mvc asp.net-mvc-4 renderaction


【解决方案1】:

好的,我发现了问题,希望这对将来的人有所帮助。

分部视图的每个控制器都包含[HttpGet] 属性。例如

[HttpGet]
public ActionResult Index()
{
}

我从两个控制器中删除了属性

public ActionResult Index()
{
}

现在一切正常。

【讨论】:

  • 不错。我遇到了使用此信息解决的类似问题。
  • 非常感谢您节省了我的时间..我保留了 [HttpPost] 。我删除了它现在它的工作
  • 对于想知道区别的人来说,一个可以是System.Web.Http,一个可以是System.Web.Mvc
  • 即使我删除了,我仍然遇到同样的问题。
  • 解决了!谢谢!
【解决方案2】:

当我的局部视图中有代码格式错误时,我的剃须刀中出现了这个错误。

如果您单击“继续”以克服错误,您将在加载它的浏览器窗口中看到实际的错误消息。

纠正局部视图中的错误,它会起作用!

【讨论】:

  • 这对我有帮助,我试图在它不喜欢的部分中添加 css 和脚本部分。坦克@Luke
  • 对我来说,这是项目中缺少的参考。我打开了每个 .cshtml 文件,看看里面是否有错误,然后我发现 @using 调用了一个未引用的 DLL 中的命名空间。
【解决方案3】:

替换:

return View(manageAdministratorModel);

与:

return PartialView(manageAdministratorModel);

否则你可能会在一个无限循环中结束,因为你正在渲染一个试图渲染一个试图渲染一个视图的视图,...

此外,您可能需要从子操作中删除 [HttpPost] 属性。

【讨论】:

  • 哦等等。您的控制器操作用[HttpPost] 属性修饰。摆脱它。对于子动作不应该有这样的属性。
  • 当我删除 [HttpPost] 属性并添加 [ChildActionOnly] 属性时,我得到一个“操作'索引'只能由子请求访问。”错误。
  • 哦,我看错了。。忽略我的评论,删除[ChildActionOnly]属性。
  • 好的,找到问题了。将在下面发布以澄清。
  • 我已经用局部视图替换并删除了所有属性。我仍然得到这个问题。我以无限循环结束。如何解决这个问题?
【解决方案4】:

“仅限儿童操作”的示例是:

     public class FiltersController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [ChildActionOnly]
        public ActionResult Departments()
        {
            string s = "Mahi and kallu";
            return View(s);
        }

    }

**for this am creating 2 views** 
1) Index:

    <html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
         @Html.Partial("Departments","Filters")

</body>
</html>
**and for Departments View:**
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Departments</title>
</head>
<body>
    <div>
       @Model      
    </div>
</body>
</html>


the ***childactions*** can be rendered with the help of "Partial" keyword.

【讨论】:

    【解决方案5】:

    去掉子视图中@{ Layout = null; }的布局。

    【讨论】:

    • 这实际上帮助了我,我的部分视图中有 Layout = null 导致了这个错误。
    【解决方案6】:

    我遇到了同样的问题,但我将 [HTTPGet] 属性放在函数名上,它对我有用。

    [HttpGet]
    //for Filter parital view
    [ChildActionOnly]
    public ActionResult Filter()
    { 
      // Your code will come here.
    }
    

    【讨论】:

      【解决方案7】:

      我遇到了完全相同的问题,因为我使用的是属性路由,所以内部异常错误消息是:

      No matching action was found on controller ''. 
      This can happen when a controller uses RouteAttribute for routing, 
      but no action on that controller matches the request.
      

      从 Html.Action() 调用的操作方法中删除 [HttpGet] 属性,它可以工作。与路由无关。

      【讨论】:

        【解决方案8】:

        我有同样的错误。当我将一个动作更改为另一个控制器时,它就开始了,因此在运行程序时无法在文件夹中找到视图。 因此,如果您将操作移动到另一个控制器,也将视图移动到相应文件夹的控制器

        【讨论】:

          【解决方案9】:

          我收到此错误,但我的问题不同。 要查看错误是什么,请在 try catch 代码中包含出现错误的行,如下所示:

           try 
              {           
                   @Html.RenderAction("Index", "Logo", new {id = Model.id});
              }
              catch (Exception e)
              {
                  throw;
              }    
          

          在 throw 行用断点执行它并检查 'e' 的内部异常。 我的问题是我在我的控制器上更改了参数名称,却忘记在我的视图上更改它。

          使用 try catch 更容易得到错误。

          【讨论】:

            【解决方案10】:

            我遇到了这个问题,这可能是因为渲染引擎找不到任何视图(对应于动作中给出的名称)我给出了错误的视图名称(我错误地给出了动作名称而不是视图名称) 当我使用 PartialView() 方法返回视图名称和视图模型时,我更正了我的视图名称,它工作正常

            【讨论】:

              【解决方案11】:

              这发生在我身上,因为我从不同的区域调用视图。

              我想调用的视图不在一个区域内,所以当从所有区域之外调用它时,调用类似

              @Html.RenderAction("Index", "Logo");

              可以正常工作。

              但是当我想从一个区域内的另一个视图调用相同的视图时,我必须在调用中添加一些额外的信息以使其明确:

              @Html.RenderAction("Index", "Logo", new { area = "" });

              【讨论】:

                【解决方案12】:

                就我而言,我在 Global.asax.cs 中添加了以下代码:

                protected void Application_Error(object sender, EventArgs e)
                {
                    var ex = Server.GetLastError();
                    ...
                }
                

                然后我在那里添加了一个断点,看到前任的 InnerException 是 SQL DB Connection 错误。所以我用正确的连接字符串替换了我的本地开发文件,问题就消失了。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多