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实例。
在以下事件中,ViewState 和 ds 引用相同的内存位置。 (这就是 ds 影响 ViewState 的原因。)
- 页面加载
- 控制事件
- Pre-Render
然后 ViewState 被序列化并保存为 base-64 编码的字符串。
在 Pre-Render 事件之后,ds 中的更改不再影响 ViewState。
您可以在此处阅读有关 ViewState 的更多信息 - Understanding ASP.NET View State。
我在视图状态中保留了一个小数据集,如下所示,我想知道为什么要更新它。
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实例。
在以下事件中,ViewState 和 ds 引用相同的内存位置。 (这就是 ds 影响 ViewState 的原因。)
- 页面加载
- 控制事件
- Pre-Render
然后 ViewState 被序列化并保存为 base-64 编码的字符串。 在 Pre-Render 事件之后,ds 中的更改不再影响 ViewState。
您可以在此处阅读有关 ViewState 的更多信息 - Understanding ASP.NET View State。