我会渲染按钮以便按以下方式更改语言:
<%: Html.ActionLink(
"EN",
ViewContext.RouteData.Values["action"].ToString(),
new { lang = "en" }, new { @class="tab" })%>
这将为我提供如下链接:{...}\en\MyController\MyMethod
- 唯一的问题是我丢失了所有路由值,这些值都在方法名称之后。如何添加它们呢?
感谢您的任何提示!
答案 0 :(得分:2)
我实际上使用了一些方便的扩展方法:
public static RouteValueDictionary ToRouteValueDictionary(this NameValueCollection collection)
{
RouteValueDictionary dic = new RouteValueDictionary();
foreach (string key in collection.Keys)
dic.Add(key, collection[key]);
return dic;
}
public static RouteValueDictionary AddOrUpdate(this RouteValueDictionary dictionary, string key, object value)
{
dictionary[key] = value;
return dictionary;
}
public static RouteValueDictionary RemoveKeys(this RouteValueDictionary dictionary, params string[] keys)
{
foreach (string key in keys)
dictionary.Remove(key);
return dictionary;
}
这允许我执行以下操作:
//Update the current routevalues and pass it as the values.
@Html.ActionLink("EN", ViewContext.RouteData.Values["action"], ViewContext.RouteData.Values.AddOrUpdate("lang", "en"))
//Grab the querystring, update a value, and set it as routevalues.
@Html.ActionLink("EN", ViewContext.RouteData.Values["action"], Request.QueryString.ToRouteValueDictionary.AddOrUpdate("lang", "en"))
答案 1 :(得分:0)
我建议您创建一个新的HTML帮助程序来完成这项工作,因为没有简洁的方法在视图中执行您想要的操作。它可能看起来像:
public static class MyHtmlHelpers {
public static MvcHtmlString ChangeLanguageLink(this HtmlHelper html, string label, string newLang) {
html.ViewContext.RouteData.Values["lang"] = newLang;
return html.ActionLink(label, html.ViewContext.RouteData.Values["action"], ViewContext.RouteData.Values);
}
}
这就是你在视图中使用它的方式:
<%: Html.ChangeLanguageLink("EN", "en") %>
答案 2 :(得分:0)
获取请求参数字符串的简单方法是
var parameters = String.Join("&", Request.QueryString.AllKeys.Select(i => $"{i}={Request.QueryString[i]}"));
它可以在控制器和视图中使用。