我有一个带有C#和Razor的ASP.NET MVC3 Web应用程序。
通过视图中的表单,我将Context.User.Identity.Name
提交到控制器A 中的操作方法。
我想在应用程序范围内(在多个控制器之间)提供此变量。 现在,我只能将其分配到控制器A 中的全局变量 _UserName ,但当然它在控制器B 中不可用。
有可能吗?
由于
弗朗西斯
答案 0 :(得分:1)
如果您在任何控制器中访问它,您应该在控制器方法中使用HttpContext.User.Identity - 它将在那里可用。无需存储在会话中。
答案 1 :(得分:1)
创建一个父控制器,所有控制器都从该控制器继承并在那里设置变量。你可以从那里做很多事情 - 将它包装在视图模型中,将一些用户细节放入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;
}
}
答案 2 :(得分:0)
您应该查看缓存,并可能使用用户会话存储此信息。
查看this问题。