2011-10-29 22 views
0

私は非常に単純なサイトでAnchorLinkを使用していますが、ちょうど2つのルートが定義されていて、1つの標準ルートと別のエリアルートがadmin/{controller}/{action}/{id}です。 AnchorLinkは、現在の要求{ID}が含まれ、すなわちせずにリンクをレンダリングしているASP.NET MVC AnchorLinkはルート値を使用していませんか?

@Html.AnchorLink("Confirm", "Confirm") 

:私が使用していることを考慮すると

/admin/release/push/255 

:私のようなURLでよ。 ! RouteValuesを調べると{id}がそこにあることがわかります。私は明示的に示すように、TEH現在のリクエストからのルート値を渡す場合:

@Html.AnchorLink("Confirm this release", "Confirm", Url.RequestContext.RouteData.Values) 

そして、それは動作しますが、私はURL /admin/release/confirm/255を取得します。なぜ私は現在の要求ルート値を渡す明示的なバージョンが動作しますが、私は現在の要求ルート値をピックアップすると思ったルート値引数なしの暗黙的なバージョンはありません?私は上記が解決策であることを知っていますが、それは醜いですし、ルート値のないAnchorLinkが期待どおりに機能していない理由がいくつかありますか?

答えて

0

ここでMVCはまさに正しいことをしています。アンカーリンクにIdパラメータが必要かどうかを知ることではありません。言い換えれば、あらかじめ解析してリンクを調べることを賢明に試してはいけません。それはレンダリングされるときにのみ行います。 idパラメータが指定されていない場合は、デフォルトルートを使用します。

同じコードをどこにでも書くことができれば、簡単に静的ヘルパークラスに取り出すことができます。それは醜さを取り除くことができます。

+0

MVCがあなたの言うことをやると思いました。どのルートがコントローラ/アクションを提供しているかを判断し、(オプションの)idパラメータを持っていることを確認し、現在のリクエスト値から供給します。私は様々な場所でこれを読んできました。そして、他のほとんどのメッセージは、リンクに追加されたパラメータの問題が「意図していない」ときに「苦しむ」ようです。 – jdh

関連する問題