Asp.net 我是否可以避免使用会杀死viewstate的UpdatePanel?

Asp.net 我是否可以避免使用会杀死viewstate的UpdatePanel?,asp.net,ajax,drop-down-menu,checkbox,updatepanel,Asp.net,Ajax,Drop Down Menu,Checkbox,Updatepanel,我选择了一个具有gridview的页面,该页面向用户提供了一个数据项列表,用户可以单击该列表“钻取”,从而将其重定向到数据维护页面 因为列表可能会变长,所以我们在顶部有一系列复选框和下拉列表作为过滤器 我们刚刚用UpdatePanelAnimationExtender实现了一个UpdatePanel,这样当页面长时间返回数据库时,就会出现一个很好的“处理…”弹出窗口 问题是,这似乎破坏了下拉列表和复选框上的viewstate。现在,当他们转到“详细信息页面”并点击“上一步”按钮返回“选择”页面时

我选择了一个具有gridview的页面,该页面向用户提供了一个数据项列表,用户可以单击该列表“钻取”,从而将其重定向到数据维护页面

因为列表可能会变长,所以我们在顶部有一系列复选框和下拉列表作为过滤器

我们刚刚用UpdatePanelAnimationExtender实现了一个UpdatePanel,这样当页面长时间返回数据库时,就会出现一个很好的“处理…”弹出窗口

问题是,这似乎破坏了下拉列表和复选框上的viewstate。现在,当他们转到“详细信息页面”并点击“上一步”按钮返回“选择”页面时,复选框和下拉列表中的选定值将恢复为初始默认值。列表仍然填充,但当用户单击数据维护页面时,它们“忘记”了它们拥有的内容

我取出UpdatePanel的.aspx代码,对动画进行了扩展和重新测试,一切都很好。因此,显然,UpdatePanel和/或AnimationXtender对viewstate的处理不好

是否有一种方法可以阻止UpdatePanel的操作,使其实际上不会将“.SelectedValue”属性归零?

首先,我将删除您的“筛选”“来自UpdatePanel的控件。假设这些控件的数据在Page_Load上有值,则无需在每次将筛选器应用于GridView时刷新这些控件。只有GridView正在刷新,因此它可能是UpdatePanel中应该包含的唯一控件

通过在UpdatePanel控件的节中声明,可以将每个筛选控件添加为更新UpdatePanel的触发器。或者,如果过滤过程是由类似“提交”的按钮调用的,则这将是要在节中声明的控件。这将在浏览器缓存中保留过滤控件的值

你也可以试试(Nikhil有一个很棒的博客,顺便说一句),它会将UpdatePanel的内容保存为浏览器历史记录列表中的历史记录条目


编辑:仅供参考,UpdatePanel不会“杀死”ViewState。ViewState通过UpdatePanel的更新机制来回传输,如果ViewState过大,通常会导致性能问题。您看到的是浏览器的历史缓存没有存储在连续回调中更新的值。上述技术应该会有所帮助。

我已经设法使用了您的技术(将控件从UpdatePanel中取出,并将它们作为AsyncPostBackTrigger项添加到Triggers集合中),以避免删除下拉列表中的选定值。不幸的是,当我触发时,即使下拉列表仍然有其成员,并且所选项目仍然出现在“文本框”部分,“SelectedIndexValue”已恢复为0,并且显示例程的筛选器无法正常工作……结果表明,清除和重新填充下拉列表中的代码中存在某些内容,因此,所选索引被重置的原因。既然这是一个应用程序编程问题,我将其标记为“已回答”。很高兴我能帮助David。谢谢。正如你所说,我要处理的真正的“问题”是,浏览器历史缓存没有将内容存储在UpdatePanel中。我已经设法让事情“正常”但不是100%地工作(修复一个不希望出现的行为,并显示“旧”缓存,修复该问题,下拉列表的值永远落后一次刷新),我怀疑我将需要UpdateHistory控件100%地修复事情