查询字符串更改时保持控件持久

时间:2009-03-05 04:19:38

标签: c# persistence postback query-string

无论如何使用新的查询字符串进行回发,该查询字符串不会将页面上的所有控件重置为默认值?我有一个名为“default.aspx”的页面,上面有几个复选框控件。我可以检查它们我想要的所有内容,它们将在回发时保持持久性(意味着它们保持已检查或未检查状态)为“default.aspx”。但是,如果我回发到“default.aspx?page = 2”,则控件全部恢复为默认状态。有没有办法阻止他们这样做?

2 个答案:

答案 0 :(得分:2)

这里要记住的是,每次进行新的回发时,您都在使用页面类的全新实例。旧实例在发送到Web浏览器时被丢弃。考虑到这一点,状态可以在回发之间持续存在的事实是非常惊人的。有很多事情要做才能使它全部同步好。

其中一件事是ViewState。 ViewState是页面表单中的一个特殊隐藏输入元素。当您使用新的查询字符串请求页面时,您不再从表单中发布该viewstate字段。你根本不再做回发了:它是一个全新页面的请求。任何表单都没有POST数据,因此缺少ViewState数据,ASP.Net也不知道您之前可能做过的任何事情。

答案 1 :(得分:0)

更改查询字符串时如何回发?如果你正在使用ASP.net复选框控件(使用runat =“server”),那么它们应该与viewstate一起保存。

Joel是正确的,创建了一个新的Page类实例,但这是Viewstate的目的,以克服HTTP的无状态特性。