我有一个带有 C# 和 Razor 的 ASP.NET MVC3 Web 应用程序。
通过 View 中的表单,我将Context.User.Identity.Name
提交到Controller A中的操作方法。
我想在应用程序范围内(在多个控制器之间)使用这个变量。现在我只能将它分配给Controller A中的全局变量_UserName ,但当然它在Controller B中不可用。
有可能这样做吗?
谢谢
弗朗切斯科
我有一个带有 C# 和 Razor 的 ASP.NET MVC3 Web 应用程序。
通过 View 中的表单,我将Context.User.Identity.Name
提交到Controller A中的操作方法。
我想在应用程序范围内(在多个控制器之间)使用这个变量。现在我只能将它分配给Controller A中的全局变量_UserName ,但当然它在Controller B中不可用。
有可能这样做吗?
谢谢
弗朗切斯科
如果您在任何控制器中访问它,您应该在您的控制器方法中使用 HttpContext.User.Identity - 它在那里可用。无需存储在会话中。
创建一个父控制器,您的所有控制器都从该控制器继承并在那里设置变量。你可以从那里用它做很多事情——将它包装在视图模型中,将一些用户详细信息放入 ViewBag 等
public class UserController : Controller
{
// create your own User class with as many properties as you need
protected User user { get; set; }
public UserController()
{
user = // get user from db, wherever
}
}
然后,只需从 UserController 继承
public class ControllerA : UserController
{
public ActionResult DoSomething()
{
user.Property = 123;
}
}
您应该研究缓存并可能使用用户会话存储此信息。
看看这个问题。