C# 获取gridview和dropdownlist,以便在导航“离开”和“返回”按钮scriptmanager后记住它们的状态

C# 获取gridview和dropdownlist,以便在导航“离开”和“返回”按钮scriptmanager后记住它们的状态,c#,.net,gridview,binding,C#,.net,Gridview,Binding,我有一个页面填充了一个gridview,一切正常 网格基本上是搜索的结果。。过滤器有许多下拉列表和几个文本框 来自网格和下拉列表的数据保存在会话中,整个页面位于updatepanel中 当我离开页面(通过点击网格内的链接),然后按“返回”按钮返回页面时,所有的拖放器都会返回到未选择的值,而网格将不可见 我知道这是因为scriptmanager没有执行“标准”回发,所以浏览器没有意识到发生了什么 但是,我在scriptmanager中将EnableHistory设置为true 有没有一种简单的方法

我有一个页面填充了一个gridview,一切正常

网格基本上是搜索的结果。。过滤器有许多下拉列表和几个文本框 来自网格和下拉列表的数据保存在会话中,整个页面位于updatepanel中

当我离开页面(通过点击网格内的链接),然后按“返回”按钮返回页面时,所有的拖放器都会返回到未选择的值,而网格将不可见

我知道这是因为scriptmanager没有执行“标准”回发,所以浏览器没有意识到发生了什么

但是,我在scriptmanager中将EnableHistory设置为true

有没有一种简单的方法可以在不删除updatepanel/scriptmanager的情况下记住这一点

另外,为了使事情进一步复杂化,scriptmanger/updatepanel实际上位于母版页中。因此,我不确定如何让导航位在scriptmanager中工作。。 显然,我有点困惑,任何人能提供的帮助都会得到很好的回报

谢谢
nat

设置EnableHistory仅告诉ScriptManager准备好使用服务器端支持。您仍然需要告诉ScriptManager如何实际使用它。UpdatePanel是否在母版页上并不重要。ScriptManager也是如此。只要您可以通过公共属性/FindControl获取所需的引用,就可以了。我已经在母版页和处理事件的ScriptManager中多次这样做

这是我两年前写的一篇文章。它有点过时了,因为您不需要扩展预览,但其余部分应该足够相关。在异步回发和绑定gridview时,必须将状态添加到历史点,并让ScriptManager存储它。这是冻结过滤器状态的地方。然后,还需要为导航事件提供一个事件处理程序。这是您提取状态的地方,使用它将控件设置为应该的状态,并绑定网格


代码示例在vb.net中,但请告诉我,我可以转换为c#。

另一个对我很有效的答案:

-在gridview上,添加以下内容:onPageIndexChange=“Gridview2\u PageIndexChange”

-在代码中(我使用的是VB),添加:

-在“加载”子页面中,添加:

GridView2.PageIndex = Session("page")

这比我在那里找到的其他解决方案要简单得多…

您好,非常感谢您的回复。您能否澄清如何处理母版页中的事件。由于我有许多页面使用此母版页,因此其中只有一个页面需要以这种方式保存状态。Scriptmanager_navigate和addhsitory entry函数应该放在哪里?是否会进入母版页,然后如果它能找到特定的控件,则保存相应控件的状态?谢谢,aspx页面知道需要保存什么状态,然后在另一端知道如何使用它,对吗?母版页知道状态的含义吗?不,所以把它放在aspx里。如果你把它放在母版页中,你会做很多额外的工作/编码。那么this.Master.scriptManager1.onnavigate+=foo?在onload或findcontrol(“scriptmanager1”)中。。无论什么感谢您的帮助,非常感谢您最终编写了一个addhistory方法,该方法在表单上完成任何值得保存的操作时调用。。因此,运行搜索、分页/排序网格。还添加了aspx页面加载(this.Master.FindControl(“scriptmanager1”)作为scriptmanager);该函数从NameValueCollection中获取位,该位作为历史状态添加到另一个函数中,然后在下拉菜单中设置所选项,并重新绑定网格,感谢您的指针
GridView2.PageIndex = Session("page")