Base COntroller
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>
它按预期工作和改变文化。
但我的问题是,每当我改变语言/文化时,它都会重定向到HOme / Index Page。
假设我在注册页面上并且我想要更改文化,它不应该将我重定向到主页/索引页面,而是希望保持在同一页面上。怎么可能?
提前谢谢你们。
请帮忙。
答案 0 :(得分:2)
您可以重定向到同一页面。我相信,重新加载页面是必要的,因为当前页面上的所有资源都需要根据文化进行更新。你可以利用UrlReferrer.AbsoluteUri
。做类似的事情:
public ActionResult SetCulture(string culture)
{
HttpContext.Session["culture"] = culture;
//all your logic
return Redirect(Request.UrlReferrer.AbsoluteUri);
}
答案 1 :(得分:1)
如果要保留在同一页面上,请使用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();
语句。
请注意,您也可以从方法中返回一些内容,例如成功消息,并在需要时将其显示在当前视图中。