2012-02-23 6 views
14

はかみそりエンジンが/Subpage@href("~/SubPage")を置き換えかみそりの利点置き換える(@href)ASP.NET MVCのドキュメントで

<a href="@href("~/SubPage")">Subpage</a>. 

ビュー内のリンクを持っているときにこのような何かをしなければならないと述べています。あなたが欲しいものを直接書き込むのではなく、かみそりのエンジンを使用する理由の利点をある何

は、それが(フォームの作成など)の代わりに

<a href="/SubPage">Subpage</a>. 

このようなケースでは、他にこの方法を実行します。私は、エンジン側で直接生成するものを直接印刷する方が、サーバー側で高速になると思います。

答えて

24

アプリケーションはサブフォルダで実行する場合、カミソリは@hrefは、このような正しいリンクが作成されます:あなたは自分でそれを書けば、あなたのリンクは次のようになりますと動作しません

www.myapp.com/subfolder/SubPage 

を:

www.myapp.com/SubPage 

~がRazorのアプリケーションルートに置き換えられるためです。

+0

サブフォルダに右のリンクを書き込んだり、アプリケーションがサブフォルダにない場合、利点はありますか? –

+6

いいえ、私はそうは思わない。しかし、あなたは柔軟性に欠けています。その名前を書いたプロジェクト全体を検索することなく、サブフォルダの名前を変更することはできません。私はそれをするのが非常に嫌です。 – Marc

+1

+ 1-この小さな宝石(@href)は、多くの開発者(@ Html.ActionLink()を使用していないとき)によって見落とされているSOOです。私ができるなら二重投票を与えるでしょう:) –

0

私は単に私がActionLink方法はHTMLを取ることができない任意の負のフォールバックに

+1

カスタムルートを定義していると、リンクが破損する可能性があります。たとえば、 'PageController'の' SubPage'アクションにマップされたカスタムルート 'a/b/c'があり、私のリンクhrefが' OtherPage'であれば、ブラウザは 'a/b/OtherPage'にナビゲートしますこのコンテキストでは、意図したターゲットはおそらく 'Page/OtherPage'でしょう。これはあなたのアプリが現在どのように書かれているかについてだけではなく、適応性があり、正常に機能しなくなるような方法ですべてのアプリを書くことです。これにより、アプリの移植性が向上し、将来の変更をより容易にサポートできます。 – defines

2

を実現することはできません

<a href="SubPage">Subpage</a>

を書きます。

通常<a>タグを作成し、hrefには@Url.Action(...)を使用する必要があります。

<a href="@Url.Action("ActionName", "ControllerName")">Link Text</a>. 
関連する問題