所以我对asp.net mvc有点新意,我正在构建一个多语言的网站,但我不想继续将LanguageId传递给每个语言特定对象的构造函数。在整个系统中将此Id存储在asp.net mvc中的最佳方法是什么?我相信对于一个用户来说,它存储在一个cookie中,但这是正确的方法吗?
此外,languageId来自数据库,所有特定于语言的标签也存储在数据库中,而不是存储在资源文件中
答案 0 :(得分:4)
说实话,我不得不与Darin不同(因为在多线程多服务器环境中,这可能会造成问题)。
我建议使用Cookie,当用户在上一次访问后再次进入您的网站时,可以轻松获取该Cookie。
答案 1 :(得分:0)
如果登录是会话驱动的,则可以将language-id
存储在会话对象中。每次用户登录时都可以填充此对象。如果会话丢失,登录也是如此。
如果您使用Cookie登录,请将language-id
存储在Cookie中。
或者,考虑将LanguageID作为路线的一部分。
routes.MapRoute(
"New",
"{lang}/{controller}/{action}/{id}",
new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional },
new { lang = "en|de|it|es|fr" }
);
用户登录后,会立即重定向到包含语言作为路径一部分的路线。使用@Url.actionlink
呈现您的链接。它们将始终包含语言ID。
答案 2 :(得分:0)
如何针对您的具体问题采取略微不同的方法,并使用可通过HttpRequest.UserLanguages获得的浏览器语言?
然后没有必要传递任何东西,因为只要你可以获得Request
对象,你就可以得到它。在您的控制器中,它将是Request.UserLanguages