2015-10-23 14 views
16

ビルドしているWebサイトが2つあり、同じまたは類似のデータがページに表示されています。コードの重複を減らすために、私は3番目のプロジェクト/ウェブサイトを作成していたと私は共有HTML、Javaベースのスクリプト、CSS、画像の場所としてそれを使用したい考え出しなどASP.NET MVC4プロジェクト間でHTMLを共有する方法

私はJavaScriptを含めることができています

、 CSS、および画像は、相対パスを使用して共有プロジェクトからきれいにします。しかし、私はHTMLの部分ページをレンダリングできません。このようなコードを使用して部分的にページをロードしようとしている2つのウェブサイトにアクセスしようとすると:

@RenderPage("/SharedArtifacts/Views/MySharedViewscshtml") 

を私は次の応答を取得:

The virtual path '/SharedArtifacts/Views/MySharedViewscshtml' maps to another application, which is not allowed. 

は今、私はGoogleで検索してに~接頭辞を使用して試してみました問題を解決するためにパスのルートを指定してください。しかし、役に立たない...と同じエラーです。

この問題を解決する方法についてのご意見はありますか?

+4

[別々のDLLにあなたのasp.net MVCかみそりビューをコンパイル](http://www.chrisvandesteeg.nl/2010/11/22/embedding-pre-compiled-razor-views-in -your-dll /) –

+2

自分のNuGetパッケージを作成してフィードを作成し、その方法であなたのプロジェクトのビューを共有することになります。フィードは、ファイルシステム上のフォルダの場所と同じくらい簡単にできます。 – SimonGates

+0

hmm。これは少し難解ですが、ネイティブではサポートされていません。私は異なるプロジェクト/ウェブサイトの間で共通のHTMLを共有すると思うだろう/ウェブサイトは共通のものです – mike01010

答えて

5

私たちはこれを常にしています。シンプル(非プログラミング)の方法は、すべてのコンパニオンサイトに共通の共有フォルダにマップされるIISで仮想フォルダを作成することです。一般的に、エラー結果ページやその他の一般的なコンテンツに対してこれを行います。

/Views/SharedVirtual/somefile.ascx

パス/Views/SharedVirtualは、IISの仮想フォルダを経由してマッピングされています。コントローラでは、return View("/Views/SharedVirtual/somefile.ascx",somemodel);を実行できます。 RenderPartialでも同様に動作します。

ローカルでは、私はmklinkを使用して、共有フォルダにマップするプロジェクトフォルダに接続ポイントを作成します。そうすれば、VSはフォルダがローカルでないと判断し、プロジェクトをローカルで実行してデバッグすることができます。

私たちは通常、Razorを使用しませんが、概念は、共有マッピングを実行しているVS、つまりOSとIISが同じであるため同じように機能するはずです。

ビューを編集するとすべてのプロジェクトで変更されるため、編集には注意する必要があります。そのため、それらを参照するすべてのプロジェクトで互換性があることを確認する必要があります。

+0

ありがとう@Wolfie。あなたが私のために確認できますか、ローカルの目的のためのmklinkは、そのプロジェクトの下の通常の〜/ Viewsパスの下にあり、残りのビューはそれぞれのサブフォルダにあります。この設定でVisual Studioから公開する際にヒッチがありますか?共有バーチャルフォルダは全く新しいものになるでしょう。 –

+0

はい。 mklinkを使用してプロジェクトの。\ Viewsフォルダにフォルダをマウントします。 VSプロジェクトエクスプローラのリンク先フォルダを右クリックし、[除外]をクリックします。あなたが望むものすべてを公開する。 – Wolfie

3

レンダリングするビューは、Webアプリケーションのルート外にあります。これは少なくともセキュリティ上の理由から許可されていません。

しかし、あなたができることは、としてデフォルトのものではなくビルドアクションを選択することによって、にリソース(.cshtml)を埋め込みます。その後、NuGetパッケージマネージャを使用してherehere、またはhereのような、既に埋め込まれたビューをレンダリングするできる仮想パスプロバイダをインストールして使用します。

0

ASP.NET MVCは同じアセンブリ内でビューを検索します。別のアセンブリにビューやHTMLを置くことは、フレームワークにとっては厄介なことになります。内部的には、フレームワークがView/HTMLをアセンブリの範囲外に置くことをサポートしているとは思わない。いくつかのカスタムコードを書いたり、そのオープンソースのフレームワークを拡張する必要があるかもしれません。

関連する問題