【问题标题】:Session variable gets updated when modifying locally本地修改时会话变量得到更新
【发布时间】:2015-09-12 08:12:01
【问题描述】:

为什么我只在局部变量中修改会话变量时会更新它。如果他们共享相同的引用,那么我想知道为什么它只在这种情况下更新,而不是在我使用类似代码的任何其他情况下。

 private void AddRefCodeToDTandConvertUnitValue(string StrRefCode)
        {
            DataTable dt = new DataTable();
            dt = Session["dataTable"] as DataTable;
            if (!dt.Columns.Contains("refCode"))
                dt.Columns.Add("refCode", typeof(String));
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dt.Rows[i]["refCode"] = StrRefCode;
                if (DrpUnits.Items.FindByText(dt.Rows[i]["Units"].ToString()) != null)
                dt.Rows[i]["Units"] = DrpUnits.Items.FindByText(dt.Rows[i]["Units"].ToString()).Value;                                
            }
        }

【问题讨论】:

  • Session Variable Gets Updated 有什么问题?您如何从Session 获得更新结果?
  • 你能用代码更清楚你的问题吗?你会把这段代码放在哪个地方?
  • 我在本地数据表中获取了会话变量的值。然后修改数据表。但不要更新会话变量。但是在本地数据表中所做的更改会反映在会话变量中,而不会更新会话变量。我认为不是复制值,而是复制数据表中会话变量的引用。我的问题是为什么?为什么要复制参考?

标签: asp.net session c#-4.0


【解决方案1】:

我在我的一个网络应用程序中遇到了同样的问题。

这是因为当您将 Session 值类型转换到 DataTable 中时,它将指向相同的内存位置。

为避免更新 Session 变量,您可以在类型转换时对其进行深度克隆。它将在另一个内存位置创建另一个具有相同值的 DataTable 实例。

【讨论】:

    猜你喜欢
    • 2014-08-02
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多