4

私は次のルートを持っています:

routes.MapRoute(
    "Default", // Route name
    "{language}/{controller}/{action}/{id}",
    new { language = "en", controller = "XY", id = UrlParameter.Optional } 
);

サイトの言語を変更するために、現在のページのURLに正確に対応しているが、別の言語部分があるリンクを作成したいと思います。

そのようなリンクを生成するための最良の方法は何でしょうか?

4

2 に答える 2

2

{language}ほとんどの場合、各リンクレンダリングビューのViewModelまたはViewDataの一部として値を挿入することをお勧めします。これを実現する方法はいくつかあります。OnActionExecuted()コントローラのメソッドのオーバーロードなど。このアプローチを採用する場合は、すべてのコントローラーを単一のベースコントローラーから継承することをお勧めします。

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    filterContext.Controller.ViewData["Language"] = GetUserLanguage();
    base.OnActionExecuted(filterContext);
}

そして、あなたの見解では:

@Url.Action("Index", "Home", new { language = ViewData["Language"] })

または、この値を自動的に追加するロジックを使用して、メソッドUrl.Action()とメソッドをオーバーロードすることを検討してください。Html.ActionLink()

于 2012-04-27T14:12:40.227 に答える
1

あなたはこのようなことをすることができます:

@Html.RouteLink("Switch Language", "Default", new { 
    controller = ViewContext.RouteData.Values["controller"], 
    action = ViewContext.RouteData.Values["action"], 
    id = ViewContext.RouteData.Values["id"], 
    language = "fr" 
})

ただし、これを処理するための拡張メソッドを作成することはおそらく理にかなっています。

于 2012-04-27T14:15:48.533 に答える