2016-12-30 9 views
0

私は2つのアプリケーションを開発する必要があるプロジェクトを進めています。私は MVCのソリューション内の2つの異なるアプリケーションプロジェクトからの異なるビュー間の移動ASP.NET

  • はBusinessEntities
  • アプリケーション1
  • アプリケーション2
  • は今、私はどのようにお知りになりたいBLL

  • DAL
    1. をn階層Artitectureを使用して、溶液中の次のプロジェクトを持っています私はこれらの2つのアプリケーションのビューの間をナビゲートします。通常、アプリケーション内をナビゲートするには次の操作を行います。

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

      ここでは、1つのアプリケーションのアクションから2番目のアプリケーションのアクションにナビゲートする方法を示します。 ありがとう

  • +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. uはuがカスタムViewEngineを使用することができますこの方法のように、あなたのアドオンの他のプロジェクトを好きなら。このように 最初にこのような経路ルールを追加する:

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

    秒: URアプリケーションの仮想パスを追加:

    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; 
        } 
    

    およびuはGlobal.asaxのを変更sould:

    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コントローラを実装する必要があります。 このように説明する必要はありますか?

    あなたがMyModulesのようなカスタムディレクトリにurアプリケーションを置くことができるCustomAreaViewEngineを開発したい場合は、

    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

    あなたの答えをありがとうが、私は "エリア"を使用して私のケースでは最高の解決策だと思う:) –

    関連する問題