将当前路由值/ url放在表单中

时间:2009-03-16 14:59:11

标签: c# .net asp.net-mvc

在我的母版页中,我有一个语言下拉菜单。当用户从下拉列表中选择一种语言时,提交将当前选择的语言发送到我的控制器中的“翻译”方法。之后它应该重定向到翻译提交之前的URL,这样它就可以显示完全相同的页面,但现在是新选择的语言。

我最好怎么做?我应该在隐藏的字段中以某种方式发送当前网址吗?或者我可以发送当前的routevaluedictionary,所以我的翻译方法可以直接redirectToRoute?

或许有更好的方法?

- 编辑 -
因为我希望我的书签也包含网站语言,所以我的所有公开操作都有一个siteLanguage参数。如果我能以某种方式有效地向用户显示一堆常规(GET)链接,其中siteLanguage参数用相关值填充,那就更好了。但据我所知,除了java之外,没有办法将链接放在下拉列表中。

3 个答案:

答案 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。