Повторное использование редактора MVC PartialView / отображения шаблонов для действий PartialViewResult - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть частичный шаблон отображения вида в Views/DisplayTemplates, называемый Bar.cshtml, так что его можно использовать как:

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

К сожалению, если я захочу использовать это в действии, подобном return PartialView("Bar",fooModel);, оно не будет найдено, потому что его нет в списке искомых папок. На данный момент я сделал копию файла и поместил ее в Views/DisplayTemplates, а также Views, но есть ли правильный способ сделать это с одним файлом?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Надеюсь, я сделал это сейчас, предоставив собственный механизм просмотра, который наследуется от механизма просмотра бритвы и просто добавляет местоположения просмотра для поиска:

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());     
0 голосов
/ 16 февраля 2012

Если вы планируете использовать это на нескольких страницах, вам следует создать папку в Views/Shared/DisplayTemplates. И чтобы использовать этот шаблон для вашего свойства FooBar Foo, украсьте его атрибутом [UIHint("Bar")].

...