asp.net - 如何访问存储在 session 中的动态对象

标签 asp.net asp.net-mvc-4 session

在 PHP 中,我们可以在 session 中存储/访问关联数组。 我如何使用 asp.net mvc4 访问它们。

我在 session 中设置变量如下:

Session["User"] = new { UserName = "abc", Email= "a@a.com", UserType="User" };

我需要一些机制来访问像 UserName 表单 session “用户”这样的值 -

string user = Session["User"]["UserName"]

有什么想法吗?

最佳答案

在您的示例中,您放入 session 中的不是动态对象,而是匿名类的实例。然而,这是行不通的,因为为了在从 session 中读取对象时访问对象的属性,您必须将其转换为正确的类型,在本例中为匿名类。因为您不知道匿名类的名称(这就是它是匿名的原因),所以您不能执行此转换。 解决这个问题的方法有以下三种:

  1. 使用命名类
  2. 使用字典
  3. 使用动态对象

1。使用命名类

这个非常简单,只需创建一个具有您需要的属性的类(或结构):

public class UserData {
  public string UserName {get; set;}
  public string Email {get; set;}
  public string UserType {get; set;}
}

然后使用这个类的实例来存储 session 中的数据:

Session["User"] = new UserData {UserName = "abc", Email= "a@a.com", UserType="User"};

并像这样访问它:

var user = (UserData)Session["User"]; 
var userName = user.UserName;

在这种情况下,您失去了“活力”,因为您必须预先声明所有属性,但作为返回,您会得到一些编译时检查,这是一件好事。除非有充分的理由存储动态值,否则我会选择此解决方案。

2。使用字典

在这里你存储了一个 Dictionary<string, string>在 session 中:

Session["User"] = new Dictionary<string, string> {{"UserName", "abc"}, {"Email", "a@a.com"}, {"UserType", "User"} };

并访问它:

var userDict = (Dictionary<string, string>)Session["User"];
var userName = userDict["UserName"];

3。使用动态对象

这与使用字典没有太大区别,因为它不提供编译时类型检查,但提供了更好的语法。

dynamic userData = new ExpandoObject();
userData.UserName = "abc";
userData.Email = "a@a.com";
userData.UserType = "User";
Session["User"] = userData;

或者,正如@James 在评论中指出的那样,您也可以在此处使用匿名类型,就像您在原始示例中使用的那样:

Session["User"] = new {UserName="abc", Email="a@a.com", UserType="User"};

并访问它:

dynamic userData = Session["User"];
var userName = userData.UserName;

关于asp.net - 如何访问存储在 session 中的动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21795188/

相关文章:

c# - 动态生成的控件 ID 返回为 NULL

php - 如何检查php中session丢失的原因是什么?

asp.net - 在 IIS7 中启用动态压缩是否值得?

c# - 数据绑定(bind) : does not contain a property with the name 'CategoryId' error

asp.net - 我怎样才能让 Swashbuckle 产生带有日期(没有时间)的 Swagger 属性?

ASP.net MVC 复选框问题

c# - 返回模型但它为空

c# - 将图表绘制到 ASP.NET MVC 4(Razor,C#)网站中

java - 如果 session ID 更改,我可以触发某个方法吗?

session - Web 应用程序上下文中的 session 到底意味着什么