3

ASP.NET 4.0 Web フォーム アプリがあり、同じ Web 内 (つまり、同じ IIS プロセス内 - 同じセッション、モジュールなど) で ASP.NET MVC アプリをホストする必要があります。

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

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

サブフォルダーの場所の形式を追加するビュー エンジンがあります。これにより、すべてのコントローラー/ビューが正常に機能しますが、コンテンツ ファイルには適切なソリューションが必要です。現在、次のように、MVC アプリのすべてのパスが MVC サブフォルダー名を指すように注意する必要があります。

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

これを達成するための確実なオプションは何ですか?

Web フォームとの間でやり取りされる要求に影響を与えたくありません。このロジックは、MVC エンジン内で解決できる URL のみを操作する必要があります (または、Web フォーム エンジンだけで解決できるURLを除くすべての URL を操作します)。

編集: 両方のサイトが同じ IIS セッションを共有することは顧客の要件であるため、現時点では個別のアプリケーションは検討されていません。この時点では、IIS プロセス間でセッションを共有することに関心はありません。

4

2 に答える 2

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"/>
于 2012-04-16T18:08:16.457 に答える
1

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

于 2012-04-16T17:25:46.327 に答える