【问题标题】:Put current route values/url in form post将当前路由值/url 放入表单 post
【发布时间】:2009-03-16 14:59:11
【问题描述】:

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

我最好怎么做?我应该以某种方式在隐藏字段中发送当前网址吗?或者我可以发送当前的路由值字典,所以我的翻译方法可以直接重定向到路由吗?

或者也许有更好的方法?

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

【问题讨论】:

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


    【解决方案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 %>
    

    【讨论】:

    • 我已经有一个基本的自定义控制器,所以我可能会检查一下
    • 我不知道您可以将操作留空。很棒的东西。
    【解决方案2】:
    public ActionResult Translate(string _lang){
          switch(_lang){
                 case "English":
                       return View("English");
                 case: "French":
                       return View("French");
                 default:
                       return View("English");
    }
    

    我个人会这样做

    【讨论】:

    • 但是这种观点会是什么?我没有 1 页需要翻译,我有很多,而且它们的 URL 因情况而异。
    【解决方案3】:

    我会将返回 url 放在查询字符串中,就像表单身份验证在重定向到登录页面时所做的那样。

    在您执行翻译请求时将 returnUrl 包含在 routeValues 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多