2012-02-02 2 views
6

別の質問に対するSOの応答では、ユーザーは、ルート値をHTMLリンクタグにハードコードするのを避けることができたと述べていますが、コントローラー、アクション、エリアなどを入れなければならないので、あなたはまだルート値をハードコーディングしています。 ネイティブHTMLタグの代わりにActionLink、BeginForm、TextBoxなどのMVC HTMLヘルパーを使用する利点は何ですか?

はどのようにこのです:

@Html.ActionLink(linkText: "MyLink", actionName: "MyAction", controllerName: "MyController", new { id = @myId }, new { area = "SomeArea"}) 

これよりも良い:

<a href='/SomeArea/MyController/MyAction/myId'>MyLink</a> 

答えて

3

(a)は、あなたが厳密にデフォルトのルーティングフォーマットとを使用している場合あなたの観測が唯一の真実である(b)の場合は、あなたのアプリケーションは常にサイトのルートにインストールされます。あなたが前者をやっていないなら(ホームコントローラとヘルプアクションに行くショートカットルート/ヘルプを作成し、その後、より多くのアクションを持つヘルプコントローラを導入して変更すると言うと、あなたのすべてを更新する必要があります)ハードコードされたアンカータグを使用することができます。ルート名とオプションで他のパラメータを含むRouteLinkヘルパーを使用するのがより良い方法です。

後者に関しては、通常、ステージング展開の大半とアプリケーションプロダクションの展開は混在していますが、多くのアプリケーションがサイトルートにインストールされています。ヘルパーを使用すると、開発中の違いを無視できます。ヘルパーは、現在のサイトをすべてのケースで使用することができます。これは、スクリプト、CSSファイル、画像などにUrlHelper to maを使用しても役に立ちますステージングとプロダクションの間でそれらのパスが指定されていないことを確認してください。

+0

すべてのポイント。私のアプリケーションは常に自分のサイトに常駐し、ルート相対パスを使用するので、私は他のユースケースを考慮していませんでした。 RouteLinkヘルパーを見てみると、ほとんどの場合、より適しているようです。 – jpshook

0

ルータが自動的にアドレスを正しい場所に解決するように、ティルダを追加することで、ヘルパーの使用にはほとんど効果がないようです。

<a href='~/SomeArea/MyController/MyAction/myId'>MyLink</a> 
関連する問題