【问题标题】:Globalization in asp.net MVC issue with page redirectionasp.net MVC 中的全球化与页面重定向问题
【发布时间】:2015-08-13 05:20:36
【问题描述】:

基础控制器

public class CultureController : Controller    
{
        public ActionResult SetCulture(string culture)
        {
            HttpContext.Session["culture"] = culture
            return RedirectToAction("Index", "Home");
        }        
}

_Layout.cshtml 文件中适用于所有视图的操作链接

<li><%= Html.ActionLink("French", "SetCulture", new {controller = "Culture", culture = "fr-FR"})%></li>
<li><%= Html.ActionLink("Spanish", "SetCulture", new {controller = "Culture", culture = "es-ES"})%></li>

它按预期工作并改变了文化。

但我的问题是,每当我更改语言/文化时,它都会重定向到主页/索引页面。

假设我在注册页面上并且我想更改文化,它不应该将我重定向到主页/索引页面,而是我想留在同一页面上。这怎么可能?

提前谢谢你们。

请帮忙。

【问题讨论】:

  • 如果要保持在同一页面,请使用ajax调用方法。
  • 嗯..你能给我举个例子吗?对不起,我很笨。

标签: c# asp.net-mvc globalization


【解决方案1】:

您可以重定向到同一页面。我相信,重新加载页面是必要的,因为您当前页面上的所有资源都需要根据文化进行更新。您可以使用UrlReferrer.AbsoluteUri。做类似的事情:

public ActionResult SetCulture(string culture)
{
        HttpContext.Session["culture"] = culture;
        //all your logic
        return Redirect(Request.UrlReferrer.AbsoluteUri);
}   

【讨论】:

    【解决方案2】:

    如果您想留在同一页面上,请使用 ajax 将文化值发送到控制器。这比尝试重定向回当前页面并不得不重新渲染视图要高效得多。

    在您的布局中,将链接生成为

    <a href="#" class="setculture" data-culture="fr-FR">French</a>
    <a href="#" class="setculture" data-culture="es-ES">Spanish</a>
    

    然后包含一个脚本(在布局中包含jquery{version}.js

    <script>
      var url = '@Url.Action("SetCulture", "Culture")';
      $('.setculture').click(function() {
        var culture = $(this).data('culture');
        $.post(url, { culture: culture }, function(data) {
    
        });
      });
    </script>
    

    然后用[HttpPost] 装饰您的方法(您更改数据,因此POST 更合适)并删除return RedirectToAction(); 语句。

    请注意,如果需要,您还可以从方法返回一些内容,例如成功消息并在当前视图中显示。

    【讨论】:

    • 非常感谢斯蒂芬先生。
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多