Templates 对操作PartialViewResult重用MVC PartialView编辑器/显示模板

Templates 对操作PartialViewResult重用MVC PartialView编辑器/显示模板,templates,model-view-controller,action,reusability,asp.net-mvc-partialview,Templates,Model View Controller,Action,Reusability,Asp.net Mvc Partialview,我在Views/DisplayTemplates中有一个名为Bar.cshtml的局部视图显示模板,因此它可以像以下那样使用: [DataType("Bar")] public FooBar Foo {get;set;} 不幸的是,如果我想在像returnpartialview(“Bar”,fooModel)这样的操作中使用它它找不到它,因为它不在搜索的文件夹列表中。目前,我已经复制了该文件并将其放入视图/DisplayTemplates以及视图,但是否有一种正确的方法来处理该文件 如果您

我在
Views/DisplayTemplates
中有一个名为
Bar.cshtml
的局部视图显示模板,因此它可以像以下那样使用:

[DataType("Bar")]  
public FooBar Foo {get;set;}

不幸的是,如果我想在像
returnpartialview(“Bar”,fooModel)这样的操作中使用它它找不到它,因为它不在搜索的文件夹列表中。目前,我已经复制了该文件并将其放入
视图/DisplayTemplates
以及
视图
,但是否有一种正确的方法来处理该文件

如果您计划在多个页面中使用此选项,则应在
视图/Shared/DisplayTemplates
中创建一个文件夹。要将此模板用于您的FooBar Foo属性,请使用
[UIHint(“Bar”)]
属性对其进行装饰。

希望我现在通过提供一个从razor视图引擎继承的自定义视图引擎来完成此操作,并简单地添加要搜索的视图位置:

using System.Linq;
using System.Web.Mvc;

namespace MvcApplication1
{
public class CustomViewEngine : RazorViewEngine
{
    public CustomViewEngine()
        : this(null)
    {

    }

    public CustomViewEngine(IViewPageActivator activator)
        : base(activator)
    {
        var partialViewLocationFormatsList = PartialViewLocationFormats.ToList();

        partialViewLocationFormatsList.Add("~/Views/{1}/DisplayTemplates/{0}.cshtml");
        partialViewLocationFormatsList.Add("~/Views/{1}/EditorTemplates/{0}.cshtml");
        partialViewLocationFormatsList.Add("~/Views/Shared/DisplayTemplates/{0}.cshtml");
        partialViewLocationFormatsList.Add("~/Views/Shared/EditorTemplates/{0}.cshtml");

        PartialViewLocationFormats = partialViewLocationFormatsList.ToArray();

        var areaPartialViewLocationFormatsList = AreaPartialViewLocationFormats.ToList();

        areaPartialViewLocationFormatsList.Add("~/Areas/{2}/Views/{1}/DisplayTemplates/{0}.cshtml");
        areaPartialViewLocationFormatsList.Add("~/Areas/{2}/Views/{1}/EditorTemplates/{0}.cshtml");
        areaPartialViewLocationFormatsList.Add("~/Areas/{2}/Views/Shared/DisplayTemplates/{0}.cshtml");
        areaPartialViewLocationFormatsList.Add("~/Areas/{2}/Views/Shared/EditorTemplates/{0}.cshtml");

        AreaPartialViewLocationFormats = areaPartialViewLocationFormatsList.ToArray();
    }
}
}
然后在Global.asax中注册:

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomViewEngine());     

这没有帮助,因为UIHint正在做与数据类型相同的事情。异常显示未对其进行查找:InnerException:System.InvalidOperationException消息=未找到局部视图“栏”,或者没有视图引擎支持搜索的位置。搜索了以下位置:~/Views/Home/Bar.aspx~/Views/Home/Bar.ascx~/Views/Shared/Bar.aspx~/Views/Shared/Bar.ascx~/Views/Home/Bar.vbhtml~/Views/Shared/Bar.cshtml~/Views/Shared/Bar.vbhtmlIs您的Bar.cshtml在视图/显示模板中还是在视图/共享/显示模板或视图/主页/显示模板中?未搜索您指定的文件。如果您将其保存在视图/显示模板中,请尝试将其移动到/Views/Shared/DisplayTemplates或/Views/Home/DisplayTemplates中的视图/Shared/DisplayTemplates中,尽管我将其放置在何处并不重要,因为MVC不会在/DisplayTemplates中搜索,这就是问题所在