ASP.Net Ajax可折叠扩展器ViewState问题

时间:2009-07-30 21:51:53

标签: asp.net ajax collapsiblepanelextender

我目前正在开发一个包含许多动态渲染页面的高级Web应用程序。页面是标准页面,其中包含一个占位符,主要内容由Xml和Xslt组合呈现。

我最近一直在尝试添加一个ASP.Net Ajax Toolkit可折叠的附件,以允许动态渲染的面板的折叠和扩展。我已将扩展程序标记添加到我们的主xslt模板中,一切都很好。好吧一切都很好,直到回发发生并且面板恢复到初始状态。因此,例如,如果我在面板折叠的情况下加载页面,那么在回发后页面无法重置任何打开的面板,问题是由于我将动态内容存储在viewstate本身并且一旦页面加载后从视图状态检索它而不是重新渲染Xml。

Phew ....有问题的背景。

现在的主要问题。你怎么能在Javascript中与扩展器进行交互。我花了几天时间确信我可以在页面变量客户端缓存状态,然后重新应用状态后回发。但是,似乎没有关于如何实现这一目标的文档或知识。我发现的最好的是一些非常简单的javascript,它允许你注册一些事件,以便在面板扩展或折叠时捕获。

我想做的就是互动并缓存每个面板的状态。任何人都可以提出任何建议吗?

1 个答案:

答案 0 :(得分:0)

好的,万一其他人需要达到类似的效果,我现在已经开始工作了。

经过大量研究后,我发现您可以使用here所述的任一方法连接到某些客户端事件。

所以我决定最好的方法是在Page_Load()事件中以编程方式将几个隐藏字段(ASP.Net HiddenField)添加到页面中,并将每个扩展程序的名称作为分隔字符串添加到一个字段中,然后每个扩展器的一个字段来保持扩展器状态。一旦页面回发,就会从Request.Form对象中检索每个扩展器隐藏字段的值(其中的键是隐藏字段ID),否则如果是初始加载则只处理默认值。

然后我创建了一个简单的客户端脚本,它处理onExpand和onCollapse事件并更新特定扩展器隐藏字段的值。

在客户端脚本的pageLoad事件中,我只根据它的隐藏字段值设置了entenders状态。

简单的确......应该开始考虑它!