从mvc 4控制器返回部分视图时出现异常

时间:2013-11-07 17:31:15

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-partialview

我有一个asp.net mvc4视图,其中包含一些部分视图。此视图还包含一个提交按钮,用于过滤网格中的某些元素,如下所示:

Configure.cshtml

<div id="MyDiv">
    @Html.Partial("../Grids/_CompGrid")
</div>

 @using (Ajax.BeginForm("Search", "Component", ...)
 {
     <input type="submit" name="_search" value="@Resource.CaptionComponentApplyFilter" />
 }

ComponentController.cs

    public PartialViewResult Search()
    {
        // Do some stuff

        return PartialView("_CompGrid");
    }

当返回上面的部分视图时,它会崩溃。好像它没有处理部分视图的正确路径。请参阅以下消息错误:

The partial view '_CompGrid' was not found or no view engine supports the searched locations.
The following locations were searched:
~/Views/Component/_CompGrid.aspx
~/Views/Component/_CompGrid.ascx
~/Views/Shared/_CompGrid.aspx
~/Views/Shared/_CompGrid.ascx
~/Views/Component/_CompGrid.cshtml
~/Views/Component/_CompGrid.vbhtml
~/Views/Shared/_CompGrid.cshtml
~/Views/Shared/_CompGrid.vbhtml

下面显示的上述文件的目录结构概述。

/root
  |
  |__ Controllers
  |       |
  |       |__ ComponentController.cs
  |
  |__ Views
  |       |
  |       |__ Home
  |       |     | 
  |       |     |__ Configure.cshtml
  |       |
  |       |__ Grids
  |       |     |
  |       |     |__ _CompGrid.cshtml
  |       |
  |       |  

关于如何解决这个问题的任何想法?

SOLUTION:

在函数中替换下面的返回行:

    public PartialViewResult Search()
    {
        // Do some stuff

        return PartialView("_CompGrid");
    }

由:

return PartialView("../Grids/_CompGrid");

但无论如何,如果有人有更好的想法,那将是受欢迎的。

1 个答案:

答案 0 :(得分:0)

你真的有两种选择。首先,您可以使用~/Views/Shared/_CompGrid.cshtml简单地引用部分。这将永远在Views文件夹的根目录下工作,因此如果您的文件夹结构发生变化,如何修复它会更加明显。

您的另一个选择是将部分放入~/Views/Shared/文件夹,因为它是MVC尝试查找视图时的默认搜索位置之一。 (您实际上可以从上面提供的错误中看到这一点。)因此,假设您将_CompGrid.cshtml移至位于~/Views/Shared/_CompGrid.cshtml,以下代码将正确找到您的视图:

ComponentController:

public PartialViewResult Search()
{
    // Do some stuff

    return PartialView("_CompGrid");
}

Configure.cshtml:

<div id="MyDiv">
    @Html.Partial("_CompGrid")
</div>