2012-02-16 13 views
0

MVCが生成するリンクを簡単にオーバーライドすることができます。コントローラ/}} {コントローラ}/{アクション}/bobここで、bobはユーザごとにユニークで、@ Html.ActionLinkを使用して生成されたすべてのリンクの最後に付けられます。 @ Url.ActionLink。MVCで生成されたリンクをオーバーライド

それぞれのメソッドをオーバーライドする必要がありますか、またはこのロジックを挿入できる別の場所がありますか?

答えて

1

カスタマイズされた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拡張メソッドを作成することができ、呼び出しデフォルトを使用してください)。

関連する問題