Viewstate 通过对 cast obj 的引用更新?

Viewstate updated by a reference to a cast obj?

我在视图状态中保留了一个小数据集,如下所示,我想知道为什么要更新它。

intId 是传递给方法的字符串。当匹配发生时,数据集 ds 中的行被删除,但 Viewstate 也同时更新。对为什么感到困惑。是参考题吗?

           DataSet ds = (DataSet)ViewState["DataSet"];

           foreach (DataRow row in ds.Tables[0].Rows)
            {
                var intId = row[0].ToString();                   

                if (roleID.ToString() == intId)
                {
                    row.Delete();
                }
            }

在序列化之前,ViewState 将包含对您的 DataSet 对象的实际引用。在PostBack上,反序列化后,是一个全新的DataSet实例。

在以下事件中,ViewStateds 引用相同的内存位置。 (这就是 ds 影响 ViewState 的原因。)

  • 页面加载
  • 控制事件
  • Pre-Render

然后 ViewState 被序列化并保存为 base-64 编码的字符串。 在 Pre-Render 事件之后,ds 中的更改不再影响 ViewState。

您可以在此处阅读有关 ViewState 的更多信息 - Understanding ASP.NET View State