在视图中执行处理程序的子请求时出错

时间:2013-10-09 12:57:40

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

我有一个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");

知道为什么会这样吗?

12 个答案:

答案 0 :(得分:28)

好的,我发现了这个问题,希望这将有助于将来。

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

[HttpGet]
public ActionResult Index()
{
}

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

public ActionResult Index()
{
}

现在一切正常。

答案 1 :(得分:26)

当我的部分视图中出现代码格式错误时,我刚在剃刀中发生此错误。

如果单击“继续”以通过错误,您将在浏览器窗口中看到显示的实际错误消息。

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

答案 2 :(得分:9)

替换:

return View(manageAdministratorModel);

使用:

return PartialView(manageAdministratorModel);

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

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

答案 3 :(得分:2)

"仅限儿童行动"是:

     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.

答案 4 :(得分:1)

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

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]属性,它可以正常工作。与路由无关。

答案 5 :(得分:1)

删除子视图中的布局@{ Layout = null; }

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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

在投掷线处使用断点执行它,并检查&#39; e&#39;的内部例外情况。 我的问题是我在控制器上更改了参数名称,忘了在我的视图上更改它。

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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

这件事发生在我身上,因为我从不同的地方调来了这个观点。

我想要调用的视图不在某个区域内,所以当从所有区域外调用它时,会调用

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

可以毫无问题地工作。

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

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

答案 11 :(得分:0)

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

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

然后,我在此处添加一个断点,并看到ex的InnerException是 SQL DB连接错误。所以我用正确的连接字符串将我的Web.config文件替换为本地开发文件,然后问题就消失了。