0

Views/DisplayTemplates调用了一个局部视图显示模板,Bar.cshtml以便可以像这样使用它:

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

不幸的是,如果我想在类似的操作中使用return PartialView("Bar",fooModel);它,因为它不在搜索的文件夹列表中,所以找不到它。目前我已经制作了该文件的副本并将其放入其中Views/DisplayTemplatesViews但是有没有正确的方法来使用一个文件?

4

2 回答 2

1

希望我现在通过提供一个继承自 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());     
于 2012-02-16T19:36:08.083 回答
0

如果您打算在多个页面中使用它,您应该在Views/Shared/DisplayTemplates. 要将此模板用于您的 FooBar Foo 属性,请使用[UIHint("Bar")]属性对其进行装饰。

于 2012-02-16T11:04:24.427 回答