2012-04-16 16 views
3

私はASP.NET 4.0 Webフォームアプリケーションを使用しており、同じWeb内でASP.NET MVCアプリケーションをホストする必要があります。同じセッション、モジュールなど)ASP.NET Webフォームアプリケーション内のサブフォルダにASP.NET MVCファイルをホストするための適切なアプローチが必要です

これは、両方のフォルダ/ファイルがルートフォルダにある限り、非常に簡単に動作します。

MVCファイルがサブフォルダ内にすべて含まれるようにするにはどうすればよいですか?

サブフォルダのロケーションフォーマットを追加するビューエンジンがあります。これにより、すべてのコントローラ/ビューの内容がうまく動作するようになりますが、コンテンツファイルには適切なソリューションが必要です。現在、私はのようにMVCアプリですべてのパスは、MVCのサブフォルダ名を指すようにすることを確実にするために注意する必要があります:

Url.Content("~/mvc/Content/Site.css") 

これを達成するためのいくつかの固体のオプションは何ですか?

Webフォームへの、またはWebフォームからの要求が影響を受けることは望ましくありません。このロジックのみMVCエンジン内で解決することができますURLを操作する(または単独のWebフォームエンジンによって解決することができのURLを除くすべてのURL を操作する)必要があります

編集:それは両方のサイトの顧客の要件であります同じIISセッションを共有するので、別のアプリケーションが今のところテーブルから外れています。この時点でIISプロセス間でセッションを共有することには興味がありません。

+0

あなたは番目の内のサブアプリケーションを作成することができますe IISサイト? (IISサイト>アプリケーションの追加) – jorgebg

+0

標準のフォルダが機能しないのはなぜですか? MVCのビューとコントローラは、通常、〜/ Views/'フォルダにあり、CSSやJSなどのサポートファイルは他のフォルダに置いて適切に参照することができます。 – Tejs

+0

このプロジェクトには長い移行パスが含まれているため、Webフォームサイトが完全になくなるため、サイトのMVC関連のフォルダ/ファイルは別にしておきたいと思います。 この質問は、既存のサイトの変更を制限するだけでなく、Webフォームサイトを廃止するために必要な再構成/組織を制限する試みの一部です。 –

答えて

3

私はこれを考慮に入れた一連のURLヘルパー拡張を作成します。ビューで

拡張クラス

namespace Core.Extensions{ 
    public static class UrlHelperExtensions 
    { 
     public static string Image(this UrlHelper helper, string fileName) 
     { 
     return helper.Content("~/mvc/Content/Images/" + fileName); 
     } 

     public static string Stylesheet(this UrlHelper helper, string fileName) 
     { 
     return helper.Content("~/mvc/Content/Css/" + fileName); 
     } 

     public static string Script(this UrlHelper helper, string fileName) 
     { 
     return helper.Content("~/mvc/Content/Scripts/" + fileName); 
     } 
    } 
} 

のWeb.Config

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="Core.Extensions" /> <-- Add your extension namespace here 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

使用

<link href="@Url.Stylesheet("site.css")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Script("jquery-1.7.1.min.js")" type="text/javascript"></script> 
<img src="@Url.Image("MyImageName.jpg")" /> 

<!--CSS in a sub directory from your root that you specified in your Extension class --> 
<link href="@Url.Stylesheet("SomeDirectory/otherCss.css")" rel="stylesheet" type="text/css"/> 
1

実行可能な解決策の1つは、MVCアプリケーションのサブドメインを作成することです。 mvc.mydomain.com。容易に統合され、追加のドメインを必要としないアプリケーション間を明確に分離します。

関連する問題