如何在系统中存储变量是ASP.NET MVC4?

时间:2013-01-30 21:39:18

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4

所以我对asp.net mvc有点新意,我正在构建一个多语言的网站,但我不想继续将LanguageId传递给每个语言特定对象的构造函数。在整个系统中将此Id存储在asp.net mvc中的最佳方法是什么?我相信对于一个用户来说,它存储在一个cookie中,但这是正确的方法吗?

此外,languageId来自数据库,所有特定于语言的标签也存储在数据库中,而不是存储在资源文件中

3 个答案:

答案 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