【问题标题】:Creating sessions in classes在类中创建会话
【发布时间】:2015-04-08 17:50:39
【问题描述】:

是否可以在班级中创建会话?

我正在我的身份验证类中尝试这个:

HttpContext.Current.Session["user"]["name"] = "firstname";

但是我得到了这个错误:

错误 342 无法将带有 [] 的索引应用于类型表达式 '对象'

有人知道为什么吗?

【问题讨论】:

  • 你可能是这个意思HttpContext.Current.Session["user"]=''somevalue"

标签: c# asp.net


【解决方案1】:

会话键/值未存储在jagged arrays 中。它们像一维数组一样被访问:

HttpContext.Current.Session["username"] = "firstname";

请记住,会话是在服务器端按用户存储的,因此最终可能会很昂贵。明智地使用它们。

另外考虑在Page 类中提取会话值,然后将其传递给您的class。有一些相关的讨论here

【讨论】:

  • 所以对于我想存储在会话中的每个值,我都必须创建另一个单维数组?
  • @Samrikan,不确定您所说的 另一个单维数组 是什么意思,但这是存储其他值所需的操作HttpContext.Current.Session["SomeOtherValue"] = "Value";
  • 是的,所以如果我想存储姓氏,我必须再次这样做吗?根本就不能创建多维数组会话吗?
  • @Samrikan,哦,我明白了,存储您的对象,而不是单个值。 (您的对象将具有 FirstName、LastName 等属性) 阅读有关它的更多信息here
【解决方案2】:

可以将类添加到会话中。例如,您可以创建一个类:

public class User 
{
    public string FirstName { get; set ;}
    public string LastName{ get; set; }
}

然后将其存储在会话中:

User user = new User() { FirstName = "Jon", LastName = "Doe" };
HttpContext.Current.Session["user"] = user;

然后从会话中获取用户:

User user = HttpContext.Current.Session["user"] as User;
string firstName = user.FirstName; // "Jon"
string lastName = user.LastName; // "Doe

【讨论】:

  • 如果我从数据表中检索信息并希望将数据表中的信息单独存储到会话中,是否可以将数据表中的行存储到会话中?或者他们是更好的替代方法吗?
  • 我认为从技术上讲可以在会话中存储 DataRow,但是,我认为创建一个类来存储数据可能是更好的方法。您返回数据的方法可以改为返回类。这将使您在将会话对象转换回类时更容易。
  • 所以基本上将从 DataRow 检索到的数据发送到一个类中,然后将其发送回一个方法以存储到会话中?
  • 如果我理解正确,是的。我会使用 DataRow 来填充类的属性,然后返回类而不是返回 DataRow 或 DataTable。
  • 我只是不明白您的代码中 User 类是如何获取值的?
猜你喜欢
  • 2014-02-28
  • 2014-09-22
  • 2012-01-21
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多