【问题标题】:Finding Razor partial views in the area EditorTemplates folder在区域 EditorTemplates 文件夹中查找 Razor 局部视图
【发布时间】:2014-08-09 16:55:51
【问题描述】:

我开始使用 EditorFor 辅助方法来渲染我的剃刀局部视图,但我无法让 Areas 文件夹中的局部视图工作。

这里是部分路径: ~\Areas\Products\Views\Shared\EditorTemplates\_Edit.cshtml

部分非常简单,只有一个“div”标签来做测试。

尝试在我的页面视图 (~\Areas\Products\Views\EditPage.cshtml) 中使用 @Html.EditorFor(m => m.ProductEditModel, "_Edit")

Visual Studio 告诉我“无法解析模板 '_Edit'”。

现在,如果我将部分移动到根视图文件夹: ~\Views\Shared\EditorTemplates\_Edit.cshtml

它工作正常,Visual Studio 解析模板没有问题,并且 div 在我的浏览器中正确呈现。

我也试过自定义RazorViewEngine,也没用

namespace MySite.Web
{
    public class RazorViewEngine : System.Web.Mvc.RazorViewEngine
    {
        public RazorViewEngine()
            : this(null)
        {
        }

        public RazorViewEngine(IViewPageActivator viewPageActivator)
            : base(viewPageActivator)
        {
            AreaPartialViewLocationFormats = new[]
                                         {
                                             "~/Areas/{2}/Views/Shared/EditorTemplates/{0}.cshtml"
                                         }.Union(AreaPartialViewLocationFormats).ToArray();
        }
    }
}

只是想知道我做错了什么?顺便说一句,我目前正在使用 MVC3,由于一些旧组件,无法升级到 MVC4。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    在 MVC 中从不同区域调用局部视图或视图时,指定局部视图或视图的完整路径。由于 MVC 是基于约定的,按照约定,它将在视图(或控制器)中的调用代码所在的同一区域中查找任何部分视图或引用的视图,除非使用特定路径。尝试使用完整路径来引用位于产品区域的局部视图:

    @Html.EditorFor(m => m.ProductEditModel, "~/Areas/Products/Views/Shared/EditorTemplates/_Edit.cshtml")
    

    由于引用的视图是共享视图,因此如果您位于同一区域,则指定完整路径并不重要。但是,如果您尝试访问与尝试引用它的视图不同的目录中的视图,并且该目录未命名为 shared,则无论区域如何,您都需要指定完整路径。控制器调用视图时类似;如果来自与引用视图相同区域的控制器指定视图的短名称,并且此视图来自名称与其自己不同的父目录(忽略“控制器”后缀),则视图引擎将找不到您的视图。当然,除非视图的父目录位于共享文件夹中。

    无论是在控制器还是视图中,您都不能跨区域使用“短名称”,因为视图引擎有一个约定,即在不使用路径时查看的位置。默认情况下,区域旨在执行此操作以使您的代码分离或分离(如果您愿意)。因此,任何“跨越障碍”的决定都应该慎重考虑,但绝对不能气馁。一切都与约定有关。

    【讨论】:

    • 局部视图与我尝试引用局部视图的页面视图位于同一区域。
    【解决方案2】:

    我现在正在回答我自己的问题。我的页面查看路径不正确。由于我的区域是 Products,控制器是 ProductController,所以我的页面视图应该放在 ~\Areas\Products\Views\Product\EditPage.cshtml 中,这样,它与视图引擎的期望相匹配,并且部分将被纠正解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-31
      • 2019-12-11
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      相关资源
      最近更新 更多