web-dev-qa-db-ja.com

Razorでサイトルートの相対リンクを使用する

Razor(C#)で正常に動作するWebサイトがあり、ローカルテスト(WebMatrix IIS)を使用すると、すべてのコーディングが適切に動作します。

サーバーに「オンライン」にすると、Webサイトは自身のサイトのルートにありません。

例えば:

http:// intranet.mycompany.com/inform

これは基本的に私のフォルダ構造の「ルート」であるため、すべてのフォルダはそこから始まります(cssファイルdefault.cshtml ...など)

私の「_PageStart.cshtml」は、リンクからサイトにアクセスしたときに適切に発生したことを確認します http://intranet.mycompany.com/inform _PageStart.cshtmlで構成したレイアウトを提供します(そしてレイアウトとレンダリングされたdefault.cshtmlを実際に表示します)

しかし、他に何も適切なパスを取得していません、例えば:

<img src="~/images/logos/hdr.png" />

Imgホルダーはそこにありますが、リンクが壊れていることを示しています... imgホルダーを右クリックしてプロパティを実行し、ファイルの場所を確認してください:

http:// intranet.mycompany.com/images/logos/hdr.png

したがって、相対ルートではなく「フル」ルートになります...

どうすれば修正できますか?

52
pSyToR

アプリ全体で相対パスを使用する必要があります。

~は、静的なHTMLコード内では機能しません。

あなたは書ける

<img src="@Url.Content("~/images/logos/hdr.png")" />

または

<img src="../images/logos/hdr.png" />

最初のアプローチは、異なる長さのルーティングURLがあるときに相対パスが変更される可能性があるレイアウトファイルに適しています。

[〜#〜] edit [〜#〜]

通常のリンクに関する質問について:

アプリの別のページにリンクする場合、ビューファイルをターゲットとして指定するのではなく、結果としてビューをレンダリングするアクションを指定します。そのためには、HtmlHelper ActionLinkを使用します。

@Html.ActionLink("Linktext", "YourController", "YourAction")

これにより、適切なURLが自動的に生成されます。

<a href="YourController/YourAction">Linktext</a>

編集2

わかりました、MVCはありません-リンクを自分で生成する必要があります。

相対パスも使用する必要があります。 /文字でリンクを開始しないでください!

<a href="linkOnSameLevel.cshtml">Link</a>
<a href="../linkOnParentLevel.cshtml">Link</a>
<a href="subFolder/linkOnOneLevelDown.cshtml">Link</a>

編集

レイアウトページを使用する場合、Hrefextensionメソッドを使用して相対URLを生成できます。

<link href="@Href("~/style.css")" ...
98
Jan

つかいます Url.Content以下に示すとおり:

<img src="@Url.Content("~/images/logos/hdr.png")" />
5
robasta

そんなこと知ってる '~ 'はデフォルトで追加されますが、すべてのパスが「.. "例:"../images/logos"など

0
ChrisBD