当用户点击文化时,应该在URL中插入/更新“culture”的标识符?

时间:2013-02-28 20:55:31

标签: asp.net-mvc-4 url-rewriting routing cultureinfo

我在MVC4中设置了自定义路由,允许使用如下模式:

文化/控制器/动作/ ID

除了默认值:

控制器/动作/ ID

我想在我的页面中添加一个显示可用文化的菜单。当用户单击文化时,应将“culture”的标识符插入/更新到URL?

在MVC4中修改这样的路径(url)的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

制作HtmlHelper

public static class UrlExtensions
{
    public static MvcHtmlString CultureUrl(this HtmlHelper htmlHelper, string cultureName)
    {
        RequestContext requestContext = htmlHelper.ViewContext.RequestContext;

        RouteValueDictionary values = requestContext.RouteData.Values;

        var data = new
        {
            culture = cultureName ?? Thread.CurrentThread.CurrentUICulture.Name,
            controller = values["controller"],
            action = values["action"],
            id = values["id"]
        };

        UrlHelper urlHelper = new UrlHelper(requestContext);
        string url =  urlHelper.RouteUrl(data);

        return MvcHtmlString.Create(url);
    }
}

然后在视图中使用它:

<%foreach(var culture in Model.cultures){%>
    <%=Html.CultureUrl(culture)%>
<%}%>