2016-12-30 36 views
0

У меня есть проект, в котором мне придется разрабатывать два приложения. Я использую п-уровневую Artitecture и имеют следующие проекты в раствореПеремещение между различными представлениями из двух разных проектов приложений в решении MVC ASP.NET

  1. DAL
  2. BLL
  3. BusinessEntities
  4. Application1
  5. Application2

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

@Url.Action("ActionName", "ControllerName", OtherStuff..) 

Теперь Как перейти от действия одного приложения к действию во втором приложении. Спасибо

+0

Почему вы не пытаетесь «Области» https://msdn.microsoft.com/en-us/library/ee671793(v=vs.100).aspx –

ответ

1
  1. Обычно я использую области для обработки этого.

    var url = Url.Action("Index", "Home", new {Area = "Myarea"}); 
        var url = Url.Action("Index", "Home", new {Area = "area2"}); 
    
  2. если и как надстройку другие проекты, как таким образом и можно использовать пользовательские ViewEngine. таким образом первым добавить правила маршрутизации, как это:

    routes.MapRoute(
         name: "app", 
         url: "{application}/{controller}/{action}/{id}", 
         defaults: new {application = "MyApplication1", controller = "Panel", action = "Index", id = UrlParameter.Optional } 
         ); 
    

второй: добавить виртуальные пути ур приложения:

public class CustomAreaViewEngine : VirtualPathProviderViewEngine 
{ 
    public CustomAreaViewEngine() 
    { 
     MasterLocationFormats = new string[] 
     { 
      "~/Views/{1}/{0}.master", 
     "~/Views/{1}/{0}.cshtml", 
     "~/Views/Shared/{0}.master", 
     "~/Views/Shared/{0}.cshtml", 
     "~/Areas/{2}/Views/{1}/{0}.master", 
     "~/Areas/{2}/Views/{1}/{0}.cshtml", 
     "~/Areas/{2}/Views/Shared/{0}.master", 
     "~/Areas/{2}/Views/Shared/{0}.cshtml", 
     "~/Areas/{2}/{2}/Views/{1}/{0}.master", 
     "~/Areas/{2}/{2}/Views/{1}/{0}.cshtml", 
     "~/Areas/{2}/{2}/Views/Shared/{0}.master", 
     "~/Areas/{2}/{2}/Views/Shared/{0}.cshtml", 
     "~/{2}/Views/{1}/{0}.master", 
     "~/{2}/Views/{1}/{0}.cshtml", 
     "~/{2}/Views/Shared/{0}.master", 
     "~/{2}/Views/Shared/{0}.cshtml", 
     "~/{2}/{2}/Views/{1}/{0}.master", 
     "~/{2}/{2}/Views/{1}/{0}.cshtml", 
     "~/{2}/{2}/Views/Shared/{0}.master", 
     "~/{2}/{2}/Views/Shared/{0}.cshtml", 

     }; 
     ViewLocationFormats = new string[] 
     { 
     "~/Areas/{2}/Views/{1}/{0}.aspx", 
     "~/Areas/{2}/Views/{1}/{0}.ascx", 
     "~/Areas/{2}/Views/{1}/{0}.cshtml", 
     "~/Areas/{2}/Views/Shared/{0}.aspx", 
     "~/Areas/{2}/Views/Shared/{0}.ascx", 
     "~/Areas/{2}/Views/Shared/{0}.cshtml", 
     "~/Areas/{2}/{2}/Views/{1}/{0}.aspx", 
     "~/Areas/{2}/{2}/Views/{1}/{0}.ascx", 
     "~/Areas/{2}/{2}/Views/{1}/{0}.cshtml", 
     "~/Areas/{2}/{2}/Views/Shared/{0}.aspx", 
     "~/Areas/{2}/{2}/Views/Shared/{0}.ascx", 
     "~/Areas/{2}/{2}/Views/Shared/{0}.cshtml", 
     "~/{2}/Views/{1}/{0}.aspx", 
     "~/{2}/Views/{1}/{0}.ascx", 
     "~/{2}/Views/{1}/{0}.cshtml", 
     "~/{2}/Views/Shared/{0}.aspx", 
     "~/{2}/Views/Shared/{0}.ascx", 
     "~/{2}/Views/Shared/{0}.cshtml", 
     "~/{2}/{2}/Views/{1}/{0}.aspx", 
     "~/{2}/{2}/Views/{1}/{0}.ascx", 
     "~/{2}/{2}/Views/{1}/{0}.cshtml", 
     "~/{2}/{2}/Views/Shared/{0}.aspx", 
     "~/{2}/{2}/Views/Shared/{0}.ascx", 
     "~/{2}/{2}/Views/Shared/{0}.cshtml", 
     "~/Views/{1}/{0}.aspx", 
     "~/Views/{1}/{0}.ascx", 
     "~/Views/{1}/{0}.cshtml", 
     "~/Views/Shared/{0}.aspx", 
     "~/Views/Shared/{0}.ascx", 
     "~/Views/Shared/{0}.cshtml" 
     }; 
     PartialViewLocationFormats = ViewLocationFormats; 
    } 

и у sould изменить global.asax:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new CustomAreaViewEngine()); 
    } 

и, наконец, вы должны реализовать контроллер ur в основном пространстве имен приложений. Вам все еще нужно объяснять так?

if u want u может разработать CustomAreaViewEngine, который может помещать приложения ur в пользовательский каталог, такой как MyModules.

0

Ваш лучший выбор может заключаться в том, чтобы просто вставлять записи в файлы Web.Config с корневыми дорожками обоих сайтов. Не то, что вы хотели бы жестко запрограммировать. Затем используйте их для управления строками, которые вы получаете от Url.Action(), для которых вы можете использовать любые строки, которые вы хотите, и не проверяет, действительно ли они соответствуют вашему проекту.

Web.config (обратные входные значения для другого сайта):

<appSettings> 
    <add key="MyRoot" value="/Site1" /> 
    <add key="OtherRoot" value="/Site2" /> 
</appSettings> 

Код:

var myRoot = WebConfigurationManager.AppSettings["MyRoot"]; 
var otherRoot = WebConfigurationManager.AppSettings["OtherRoot"]; 
var url = Url.Action("Bla", "YadaYadaYada"); 
var otherUrl = otherRoot + url.Substring(myRoot.Length); 

Вы можете создать вспомогательный или класс одноплодной для каждого сайта и т. д., чтобы оптимизировать это, но концепция остается прежней.

+0

Спасибо за ваш ответ, но я думаю, что использование «зон» - лучшее решение в моем случае :) –

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