No UpdatePanel found for AssociatedUpdatePanelID "UpdatePanelTreeView" 解决办法

最近用 ASP.NET 2.0 AJAX Extensions (Atlas 1.0 Beta )做了一个小项目,遇到一些问题,搞的头都晕了,现把它们记录下来,如果你也遇到这样的问题,希望对你有帮助。

如果你在 ASP.NET 2.0 AJAX  工程中使用了框架,那做页面跳转可能是个麻烦事,因为在使用了UpdatePanel的页面,是不能使用Response.Write()来输出JavaScript,这样也就实现不了把跳转代码写到客户端,使用RegisterClientScriptBlock注册也不行:

   string js = "<script>parent.window.location.href=\"Login.aspx\";</script>"

如果是用Response.Redirect("Login.aspx")的话,那只是重定向的框架中的某一部分,不能实现Session过期后整个跳转到Login.aspx页面。
要解决此方法,需要用到ASP.NET 2.0中的母版页,做一个母版页,把通用的东西集中到母版页中,然后新建的页面只要继承自它就好了,这样做的好处就是不再需要框架,出错后可以用 Response.Redirect("Login.aspx") 来跳转到登录页面了。

Beta版的UpdateProgress增加了一个属性 AssociatedUpdatePanelID,这个属性可以用来指定哪个UpdatePanel更新后,显示UpdateProgress中的内容。这样在一个页面,可以出现多个UpdateProgress ,为不同的UpdatePanel指定不同的更新内容。

这个一个很好的改进,如果用在框架页中,为UpdateProgress指定AssociatedUpdatePanelID没有任何问题,但是我把工程改用MasterPage后,问题就出来了
No UpdatePanel found for AssociatedUpdatePanelID "UpdatePanelTreeView"  ,老是出现这个问题,搞的我莫名其妙,用google在国外的网站上找到了解决办法,就是在Page_Load()事件中,重新指定AssociatedUpdatePanelID,但是不要写在 if(!this.IsPostBack){}里:
 this.UpdateProgressGridView.AssociatedUpdatePanelID = this.UpdatePanelTreeView.UniqueID;


posted @ 2006-10-30 10:50 老蒋 阅读(1749) 评论(4) 编辑 收藏

 回复 引用 查看   
#1楼2006-10-30 11:57 | Jeffrey Zhao      
关于您说的第一个问题,是指在UpdatePanel进行partial rendering的时候无法使用您说的那些功能吗?其实您可以使用现在的Client Page Life-Cycle来避免这个问题,例如您能够响应pageLoading事件,在必要的时候做“parent.window.location.href='Login.aspx'”这个事情。
 回复 引用 查看   
#2楼[楼主]2006-10-30 12:05 | 老蒋      
@ Jeffrey Zhao
您好,还不是很明白 Client Page Life-Cycle ,有这样的示例吗?

 回复 引用 查看   
#3楼2006-10-30 12:10 | Jeffrey Zhao      
@老蒋
官方文档在这一点上说明地比较清楚:)
http://ajax.asp.net/docs/tutorials/usingMsAjaxLibrary/default.aspx

 回复 引用 查看   
#4楼[楼主]2006-10-30 12:39 | 老蒋      
@Jeffrey Zhao
谢了,又学了不少东西