在ASP.NET MVC 3中使变量可以普遍访问?

时间:2012-04-17 03:10:28

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

因此,当您使用Java创建网站时,您会有一个名为Session的内容,在该会话中,只要该浏览器会话正在进行,您就可以存储所需的任何信息。

我使用ASP.NET MVC 3并且能够在正确的时间传递正确的数据是相当新的,这让我经常被束缚。在大多数情况下,我理解将变量从视图传递到控制器并返回到其他视图。

但我想知道是否有办法让某些东西允许让我们说,从任何视图中获取用户的地址?我知道内置了User.Identity.Name,这对于检查用户是否在他们自己的页面上非常方便,等等。但是有没有办法让User对象具有可在任何地方访问的自定义信息?

我目前正在努力在我的网站上建立一个声誉系统(很像这个网站),不同的声誉可以让你做不同的事情。因此,我需要说很多观点"嘿,如果用户有这个声誉,让他们看看这个功能。"但是,如果我必须将用户传递到每个视图中,这是非常繁琐的。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找HttpContext.Session

如果您想了解有关会话和ASP.NET MVC的更多信息,请查看this article以更好地了解会话在请求期间何时可用。

答案 1 :(得分:1)

您可以将自定义类对象保留为Session。会议将在各种请求中提供。

假设你有这样的课程

public class LoggedInUser
{
  public string DisplayName { set;get;}
  //Other relevant properties. relevant only not everything !
}

你可以将它存储在这样的会话中

LoggedInUser objLoggedInUser=new LoggedInUser();
objLoggedInUser.DisplayName="Johnson";
Session["LoggedUser"]=objLoggedInUser;

现在,无论您想要什么,都可以在此会话中阅读

LoggedInUser objLoggedInUser;
if(LoggedInUser objLoggedInUser=!=null)
{
  objLoggedInUser=(LoggedInUser)Session["LoggedUser"];
  // Now you can access objLoggedInUser.DisplayName
}

我会将此功能包装到一个函数中并调用该函数以获取我想要的数据。