2010-01-03 2 views
3

Мы разрабатываем 3 приложения asp mvc, для этого потребуется один и тот же общий редактор &. Вместо того, чтобы копировать/вставлять их во все 3 проекта, возможно ли каким-то образом разместить их в общем компоненте и как-то ссылаться на них во всех приложениях?Есть ли способ повторно использовать шаблоны редактора и отображения в приложениях asp mvc?

ответ

1

Вам нужно будет создать свой собственный ViewEngine, если хотите сделать вид из места, отличного от папок Views.

public class CustomViewEngine : WebFormViewEngine { 
    public CustomViewEngine() : base() { 

     MasterLocationFormats = new[] { 
      "/YourFolder/{1}/{0}.master", 
      "/YourFolder/Shared/{0}.master" 
     }; 

     ViewLocationFormats = new[] { 
      "/YourFolder/{1}/{0}.aspx", 
      "/YourFolder/{1}/{0}.ascx", 
      "/YourFolder/Shared/{0}.aspx", 
      "/YourFolder/Shared/{0}.ascx" 
     }; 

     PartialViewLocationFormats = ViewLocationFormats; 
    } 

    //Override the FindView method to implement your own logic 
    public override ViewEngineResult FindView(
     ControllerContext controllerContext, string viewName, 
     string masterName, bool useCache) 
     return base.FindView(controllerContext, viewName, masterName, useCache); 
    } 
} 

Затем зарегистрировать ваш ViewEngine в Global.asax:

protected void Application_Start() { 
    ViewEngines.Engines.Clear(); 
    ViewEngines.Engines.Add(new CustomViewEngine()); 
} 

Кроме того, this post может быть полезным. (слишком плохо, что ссылка на ссылку внизу сломана)

Редактировать: Похоже, что это решение не будет работать на практике, поскольку ASP.NET не позволит загружать контент из-за пределов каталога приложения (см. Eilon).
Но ссылка выше, сохраняющая представления в БД, все еще может быть полезна.

+0

Это не решает проблему под рукой. Он по-прежнему не будет загружать пользовательские элементы управления из других приложений (или из любой папки вне приложения). – Eilon

+0

@Eilon, разве вы не имеете в виду общие представления пользовательских элементов управления? –

+0

Я имею в виду, что ваше решение просто позволяет вам размещать элементы управления пользователя в других файлах в * том же * приложении. Первоначальный вопрос задал вопрос о возможности использования * несколькими * приложениями одинаковых пользовательских элементов управления. – Eilon

0

Для совместного использования пользовательских элементов управления (или почти любое содержание) между несколькими приложениями ASP.NET вы можете использовать трюк, перечисленные здесь: http://aspadvice.com/blogs/ssmith/archive/2006/10/05/Tip_3A00_-Share-User-Controls-Between-Applications-in-ASP.NET.aspx

Основная идея состоит в том, чтобы поместить файлы ASCX в папку и сделать эту папку в виртуальную папку других приложений (вы можете иметь несколько виртуальных папок, указывающих на одну и ту же физическую папку).

1

Я не уверен, как это можно сделать, но должен быть способ скомпилировать страницы в DLL и обмениваться библиотекой.

Но если вы можете позволить себе использовать собственный двигатель просмотра и другую систему шаблонов (например StringTemplate), то вы можете поделиться мнениями, как если вы используете библиотеку:

  • Создать проект библиотеки классов
  • Создайте свои шаблоны как обычно и отметьте их как «Встроенный ресурс». Это позволит убедиться, что они будут помещены в библиотеку DLL
  • Напишите свой собственный механизм просмотра, чтобы вытащить шаблоны из сборки (DLL). Хороший старт может быть редактирование/разветвление существующего: http://code.google.com/p/string-template-view-engine-mvc/source/browse/trunk/StringTemplateViewEngine/StringTemplateViewEngine.cs
  • Затем зарегистрировать свой вид двигателя в проекте ASP.NET MVC

 Смежные вопросы

  • Нет связанных вопросов^_^