Могу ли я добавить в контекст поиска /EditorTemplates в ASP.NET MVC 3?

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

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

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

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

спасибо, Ant

Ответ 1

Хорошо, получилось

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

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

И плюхнулся мой стандартный материал там ~/Views/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!

Ответ 2

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

Ответ 3

Вместо замены механизма RazorView (как было предложено Энтони Джонстоном) вы можете просто изменить существующее свойство RazorViewEngine PartialViewLocationFormats. Этот код находится в 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();
}