即使在页面上,EnableViewState属性被禁用,我仍然看到页面上存在一些viewstate:
"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"
我的问题是为什么?
答案 0 :(得分:8)
这是控制状态。
如果你真的想摆脱viewstate和controlstate,你可以在代码隐藏页面中使用这段代码,或者在代码隐藏派生的任何类中使用
class MyPage : Page {
private class DummyPageStatePersister : PageStatePersister {
public DummyPageStatePersister(Page p) : base(p) {}
public override void Load() {}
public override void Save() {}
}
private DummyPageStatePersister _PageStatePersister;
protected override PageStatePersister PageStatePersister {
get {
if (_PageStatePersister == null)
_PageStatePersister = new DummyPageStatePersister(this);
return _PageStatePersister;
}
}
// other stuff comes here
}
这样做时要非常小心,因为你违反了与控件的合同。 MSDN明确声明控制状态始终可用。然而,在实践中,它对我有用。
修改强> 由于我被投票,我想再次指出:除非你确切知道自己在做什么,否则不要这样做。在我的例子中,几乎整个应用程序都是用客户端javascript编写的,在发生回发的那些少数事件中,我总是使用Request.Form集合来检索值。 如果执行此操作,请不要使用服务器端控件进行简单渲染。
答案 1 :(得分:4)
这可能是使用ControlState的控件。任何具有控制状态的控件都将忽略您的ViewState设置。
答案 2 :(得分:3)
这篇文章有点陈旧,但根据我的理解,大多数要点仍然有效:
答案 3 :(得分:2)
如果您在ASP.NET中开发,请阅读ViewState,这是一篇绝对精彩的文章!
ASP.NET ViewState Helper也是查看ViewState中正在发生的事情的好工具
答案 4 :(得分:0)
Controlstate可能是原因。无法禁用控制状态。在ASP.NET 2.0中,进行控制工作所需的数据(控制状态)与其他数据(视图状态)之间存在区别
是的,有些控件在没有controlstate的情况下不起作用。 如果您想知道哪一个导致它或者查看状态包含什么,请查看viewstate viewer
答案 5 :(得分:0)
实现 IPostBackEventHandler 的控件,如 Textbox,Checkbox等。即使在禁用视图状态后也会保留状态。原因是在Load Postback Data阶段,这些控件将从Posted back form获取状态信息。
但 label 之类的控件如果没有实现 IPostBackEventHandler ,则不会从发回的数据中获取任何状态信息,因此完全依赖于viewstate来维持状态。