Zas*_*shi 4 asp.net asp.net-mvc-5
我的ASP.NET MVC5应用程序存在问题.我的应用程序可以设置浏览器中设置的lang/culture(现在只有英语和波兰语(默认)).我想通过点击Html.ActionLink让用户改变语言/文化.
我创建了一个类:
namespace Guestbook
{
public static class Click
{
public static void SetCulture(string name)
{
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有我的观点:
@Html.ActionLink("PL", "", "Guests", routeValues: null, htmlAttributes: new { onclick = "SetCulture(\"pl\");" })
@Html.ActionLink("EN", "", "Guests", routeValues: null, htmlAttributes: new { onclick = "SetCulture(\"en\");" })
Run Code Online (Sandbox Code Playgroud)
当然,它不起作用.我还需要什么?JavaScript函数?
最简单的答案是您需要创建一个然后链接到的控制器.
public class LanguageController : Controller
{
public ActionResult SetLanguage(string name)
{
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
HttpContext.Current.Session["culture"] = name;
return RedirectToAction("Index", "Home");
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你看来:
<a href="@Url.Action("SetLanguage", "Language", new { @name = "pl" })">Polski</a>
<a href="@Url.Action("SetLanguage", "Language", new { @name = "en" })">English</a>
Run Code Online (Sandbox Code Playgroud)
您可以考虑将会话或类似的用户数据存储起来.
编辑:
例如,您可以在global.asax中使用Application_BeginRequest事件.
protected void Application_BeginRequest(Object sender, EventArgs e)
{
var name = HttpContext.Current.Session["culture"] as string;
if (string.IsNullOrEmpty(name))
{
return;
}
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
将Cookie保存在SetLanguage操作中:
var cookie = new HttpCookie("_culture", name);
cookie.Expires = DateTime.Today.AddYears(1);
Response.SetCookie(cookie);
Run Code Online (Sandbox Code Playgroud)
在Application_BeginRequest中获取cookie:
var cookie = HttpContext.Current.Request.Cookies["_culture"];
var name = cookie != null ? cookie.Value : null;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8805 次 |
| 最近记录: |