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

C# 如何在ASP.NET MVC4系统中存储变量?,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-2,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 2,Asp.net Mvc 4,所以我对asp.net mvc有点陌生,我正在构建一个多语言的站点,但我不想一直向每个特定于语言的对象的每个构造函数传递LanguageId。在整个系统的asp.net mvc中存储此Id的最佳方式是什么?我相信对于用户来说,它会被存储在cookie中,但这是正确的方法吗 此外,languageId来自数据库,所有特定于语言的标签也存储在数据库中,而不是存储在资源文件中。老实说,我不同意Darin的观点,因为在多线程多服务器环境中,这可能会带来问题 我建议使用cookie,当用户上次访问您的站点

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


此外,languageId来自数据库,所有特定于语言的标签也存储在数据库中,而不是存储在资源文件中。老实说,我不同意Darin的观点,因为在多线程多服务器环境中,这可能会带来问题


我建议使用cookie,当用户上次访问您的站点后再次进入您的站点时,可以很容易地找到它。

老实说,我不同意Darin的观点,因为在多线程多服务器环境中,这可能会带来问题


我建议使用cookie,当用户在上次访问后再次进入您的站点时,可以轻松获取该cookie。

如果您的登录是会话驱动的,则可以将您的语言id存储在会话对象中。用户每次登录时都可以填充此对象。如果会话丢失,登录也会丢失

如果使用Cookie登录,请将语言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。

如果您的登录是会话驱动的,则可以将您的语言id存储在会话对象中。用户每次登录时都可以填充此对象。如果会话丢失,登录也会丢失

如果使用Cookie登录,请将语言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。

对于您的特定问题,采用稍微不同的方法,并使用浏览器语言(可通过访问获取)怎么样


这样就不需要传递任何信息,因为您可以在任何可以获取请求对象的地方获取此信息,例如在控制器中,它就是请求。用户语言

对于您的特定问题,如何采取稍微不同的方法,并使用浏览器语言(可通过以下途径获得)


这样就不需要传递任何信息,因为你可以在任何可以获取请求对象的地方获取此信息,例如,在你的控制器中,它将是Request.UserLanguages

查看此答案以了解我曾经遇到的类似问题查看此答案以了解我曾经遇到的类似问题