在我的母版页中,我有一个语言下拉菜单。当用户从下拉列表中选择一种语言时,提交将当前选择的语言发送到我的控制器中的“翻译”方法。之后它应该重定向到翻译提交之前的URL,这样它就可以显示完全相同的页面,但现在是新选择的语言。
我最好怎么做?我应该在隐藏的字段中以某种方式发送当前网址吗?或者我可以发送当前的routevaluedictionary,所以我的翻译方法可以直接redirectToRoute?
或许有更好的方法?
- 编辑 -
因为我希望我的书签也包含网站语言,所以我的所有公开操作都有一个siteLanguage参数。如果我能以某种方式有效地向用户显示一堆常规(GET)链接,其中siteLanguage参数用相关值填充,那就更好了。但据我所知,除了java之外,没有办法将链接放在下拉列表中。
答案 0 :(得分:1)
我有类似的情况,我的解决方法略有不同。
因为我的母版页中有功能,所以我创建了一个新的基本控制器类(继承自Controller),所有我的真实控制器都继承自我的自定义类。
然后,我在基类中实现OnActionExecuting来做一些常见的工作。
然后,在您的母版页中,如果您有这样的表单,它将使用GET请求提交到当前URL并将该语言添加为查询字符串参数:
<form id="language" method="get" >
<select name="language">
<option value="en">English</option>
<option value="es">Spanish</option>
...
</select>
</form>
使用jQuery将其连接到自动提交等。
您可以在基本控制器类的查询字符串中查找语言参数,并设置告诉真实控制器方法使用哪种语言的标志。在模型中,您直接转到真实控制器以重新生成页面并避免重定向。
注意,如果您还没有使用查询字符串参数,这只能普遍使用。
如果这对您不起作用,您也可以使用当前的方法,但在隐藏字段中包含要重定向到的URL,如下所示:
<%= Html.Hidden("redirect", Request.Url %>
答案 1 :(得分:0)
public ActionResult Translate(string _lang){
switch(_lang){
case "English":
return View("English");
case: "French":
return View("French");
default:
return View("English");
}
我个人会这样做
答案 2 :(得分:0)
我会将返回的url放在查询字符串中,就像表单身份验证重定向到登录页面时一样。
执行翻译请求时,在routeValues中包含returnUrl。