MVCが生成するリンクを簡単にオーバーライドすることができます。コントローラ/}} {コントローラ}/{アクション}/bobここで、bobはユーザごとにユニークで、@ Html.ActionLinkを使用して生成されたすべてのリンクの最後に付けられます。 @ Url.ActionLink。MVCで生成されたリンクをオーバーライド
それぞれのメソッドをオーバーライドする必要がありますか、またはこのロジックを挿入できる別の場所がありますか?
MVCが生成するリンクを簡単にオーバーライドすることができます。コントローラ/}} {コントローラ}/{アクション}/bobここで、bobはユーザごとにユニークで、@ Html.ActionLinkを使用して生成されたすべてのリンクの最後に付けられます。 @ Url.ActionLink。MVCで生成されたリンクをオーバーライド
それぞれのメソッドをオーバーライドする必要がありますか、またはこのロジックを挿入できる別の場所がありますか?
カスタマイズされたURLルーティング方式が本当に必要なように聞こえます。これは、ActionLinkオーバーロードの大部分の "ルート値"パラメータが対象となります。マップされたルートの値を設定するために使用される値を、そのメソッドに供給できます。デフォルトでは、単一のルートは、あなたのケースでは、あなたがこれを行うことができますので、それに追加「ID」の値があります。
@Html.ActionLink("link", "Home", "Index", new { id = "bob" })
を、あなたが見えるURLになるだろうが好き:
http://www.site.com/Home/Index/bob
の場合
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{user}/{id}", // URL with parameters
new
{
controller = "Home",
action = "Index",
user = "guest",
id = UrlParameter.Optional
} // Parameter defaults
);
は今、あなたは、次のいずれかを使用できます:あなたは、コードビハインドあなたのGlobal.asaxの中で、ルートマップに、任意の新しい要素を追加することができ、また、そこにidパラメータを必要とする
@Html.ActionLink("link", "Home", "Index", new { id = 1 })
@Html.ActionLink("link", "Home", "Index", new { user = "bob" })
@Html.ActionLink("link", "Home", "Index", new { user = "bob", id = 1 })
そして、あなたは、それぞれ、になるだろう:
http://www.site.com/Home/Index/guest/1
http://www.site.com/Home/Index/bob
http://www.site.com/Home/Index/bob/1
MVCルーティングが複雑にも、かなり強力ですが、最も強力なものが好き。 This articleはあなたに良い紹介を提供します。 MVCの古いバージョン用ですが、基本は同じです(経路の[]を{}に変更するだけです)。
また、すべてのユーザーにuserパラメータを追加することを忘れたくなければ;あなたがしたい場合は、単にアクション、コントローラ、データなどのために「ヌル」を渡し
public static MvcHtmlString MyActionLink (this HtmlHelper html, string text, string action, string controller, IDictionary<string, object> attrs)
{
var data = new { user = GetTheUser() };
return html.ActionLink(text, action, controller, data, attrs)
}
(必要に応じて追加のオーバーロードを追加:あなたはあなたのためにそれを行うには、独自のHtmlHelperやUrlHelper拡張メソッドを作成することができ、呼び出しデフォルトを使用してください)。