1

次のように、 include ディレクティブを使用して他のいくつかの html ファイルを含める必要がある ASP.NET MVC Web アプリケーションがあります。

<!--#include virtual=/include/bottom.shtml -->

私の問題は、アプリケーション パスが異なるサーバーにこのアプリケーションをデプロイする必要があることです。たとえば、ある場所ではアプリケーションをマップし、localhost/myapp/別の場所ではlocalhost/.

このlocalhost/シナリオでは、上記のコード例は問題なく動作します。しかし、アプリがオンlocalhost/myappになっていると、ファイルが見つからなかったことを知らせるパーサー エラー メッセージが表示されます。

アプリケーションの相対パスを考慮してディレクティブをカスタマイズするにはどうすればよいですか (できれば毎回検索と置換を使用しないでください)。

ありがとうございました!

4

2 に答える 2

3

先頭のスラッシュを削除します。つまり、ページではなく、ルートからパスを計算するように強制します。

しかし、@mare が言ったように、2011 年に #include を使用する理由はありません。おそらくやりたいことは、Razor の を使用して部分的にレンダリングすること@Html.Partial()です。


更新された制約を考えると、古い #include を使用するよりも、MVC でこれを処理するためのはるかにクリーンな方法がまだあります。やりたいことは、ディスクからファイルを読み取り、コンテンツを吐き出すようにコントローラーアクションをセットアップすることです。次に、そのアクションを通常の MVC アクションのようにレンダリングします。

于 2011-07-05T12:10:12.607 に答える
1

まず第一に、ASP.NET MVC でそのようなディレクティブを使用する理由がわかりません。Partials、Sections などの他のより良いオプションがあるためです。

ただし、これらのディレクティブを本当に使用したい場合は、次のコマンドを使用して相対パスを取得できます。

Url

ヘルパー。

アップデート

UrlASP.NET MVC でリンクを作成するには、Url.Content()、Url.Action()、Url.ActionLink() などのヘルパー メソッドを使用します。

たとえば、これは、典型的な ASP.NET MVC Razor ビューで、bottom.shtml ファイルへの相対パスをレンダリングします。

#include virtual=@Url.Content("~/include/bottom.shtml")

include問題は、明らかに HTML コメント内にある を使用することから生じます。私は自分の観察を説明することしかできません。ビューでこれを行うと

<!-- @Url.Content("~/public/images/foobar.png") -->

これは、ASP.NET MVC WebForms ビュー エンジン用です。

<!-- <%=Url.Content("~/public/images/foobar.png")%> -->

これは、前の両方の文によって Web ページのソースでブラウザーによってレンダリングされます。

<!-- /public/images/foobar.png -->

そのため、機能していると思いますが、ASP.NET MVC の学習がもう少し必要になるかもしれません。

于 2011-07-05T11:58:46.233 に答える