Могу ли я добавить в пути поиска Display / EditorTemplates в ASP.NET MVC 3? - PullRequest
14 голосов
/ 07 апреля 2011

У меня есть стандартный набор шаблонов для моих проектов MVC, который я хочу сохранить как внешнюю папку в моем контроле исходного кода (SVN)

Это означает, что я не могу поместить какие-либо файлы, специфичные для проекта, в эту папку, так какон будет перенесен в неправильное место ... .. и мои стандартные шаблоны должны переопределить те, которые используются самим MVC, поэтому они должны быть там, где MVC ожидает переопределения шаблонов (например, ~ / Views / Shared / EditorTemplates)

Так, где я могу разместить свои проекты?

Должен ли я поместить их в ~ / Views / Shared / SiteEditorTemplates, например, и добавить путь к поиску?Как бы я это сделал?Или другие предложения?

спасибо, Муравей

Ответы [ 3 ]

20 голосов
/ 07 апреля 2011

Хорошо, понял

Код редактора в mvc ищет редакторы в PartialViewLocationFormats для движка, добавляющего DisplayTemplates или EditorTemplates к пути.

Итак, я создал новый путь под представлениями ~ / Views / Standard /

И положил туда свои стандартные вещи ~ / Просмотров / Standard / EditorTemplates / string.cshtml

Теперь зарегистрируйте новый путь в движке в global.asax Application_Start

protected void Application_Start() {
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    ViewEngines.Engines.Clear();
    var viewEngine = new RazorViewEngine {
        PartialViewLocationFormats = new[]
        {
            "~/Views/{1}/{0}.cshtml",
            "~/Views/Shared/{0}.cshtml",
            "~/Views/Standard/{0}.cshtml"
        }
    };

    ViewEngines.Engines.Add(viewEngine);
}

Обратите внимание, что это избавит от механизма просмотра веб-форм и путей vb, но они мне все равно не нужны

Это позволяет мне иметь внешний интерфейс для ~ / Views / Standard в SVN и для проекта, который необходимо переопределить при необходимости - rah!

4 голосов
/ 07 апреля 2011

Лично я экстернализую определенные шаблоны как пакет NuGet, и каждый раз, когда я запускаю новый проект ASP.NET MVC, я просто импортирую этот пакет NuGet, и он развертывает шаблоны в соответствующих местах (~/Views/Shared/EditorTemplates), чтобы переопределить шаблоны по умолчанию. .

3 голосов
/ 09 сентября 2013

Вместо замены движка RazorView (как это было предложено Энтони Джонстоном) вы можете просто изменить существующее свойство PartialViewLocationFormats RazorViewEngine.Этот код идет в Application_Start:

System.Web.Mvc.RazorViewEngine rve = (RazorViewEngine)ViewEngines.Engines
  .Where(e=>e.GetType()==typeof(RazorViewEngine))
  .FirstOrDefault();

string[] additionalPartialViewLocations = new[] { 
  "~/Views/[YourCustomPathHere]"
};

if(rve!=null)
{
  rve.PartialViewLocationFormats = rve.PartialViewLocationFormats
    .Union( additionalPartialViewLocations )
    .ToArray();
}
...