asp.net MVC中的全球化与页面重定向问题

本文关键字:重定向 问题 全球化 net MVC asp | 更新日期: 2023-09-27 18:07:53

基本控制器

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>

正如预期的那样,它正在发挥作用并改变文化。

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

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

提前谢谢你们。

请帮忙。

asp.net MVC中的全球化与页面重定向问题

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

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

如果您想保持在同一页面上,请使用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();语句。

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