思维的乐趣

Enjoy it
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ASP.NET AJAX 中的ScriptManagerProxy

Posted on 2010-05-29 15:26  szh114  阅读(774)  评论(0编辑  收藏  举报

今天接触到一个概念:Asp.net Ajax 中的ScriptManagerProxy控件。因为框架规定了一个ASPX页面中只能用一个ScriptManager控件,而且要使用AJAX特性,一个页面必须至少有一个ScriptManager控件。但有时候如使用了MASTER页面的时候,就会出现MASTER页面中按需使用了ASP.NET AJAX特性,定义了一个ScriptManager控件,而CONTENT页面中也需要使用AJAX特性的时候,就可以在CONTENT页面中定义一个ScriptManagerProxy控件代替ScriptManager。

于是我先试了MASTER页面中定义ScriptManager控件,且使用UpdatePanel控件。然后同时CONTENT页面中也定义了ScriptManager控件,且也使用UpdatePanel控件。然后BUILD,成功了。但是运行时就报错了,说得也很直接,就是一个页面中不能同时有两个ScriptManager控件。于是我想既然MASTER页面中其实相当于直接引用吧,那它中有了,我CONTENT页面中就不需要定义它,直接用UpdatePanel不就结了。我一试,成功了!

然后我又试用了下前面提到的ScriptManagerProxy,也是成功的。

那不用ScriptManagerProxy与用了它,效果看来是一样的,那倒底有什么区别呢?图方便当然是不用省事,实质上肯定有用处。

 

查了一下,想了一下,差不多是因为如下的原因好像:

既然MASTER页是能用母版页,其中就不适合定义一些具体页面的特殊属性,具体到ScriptManager上来说,Content页中的AJAX应用可能需要指定一些特殊的web service,或者引用一些特殊的script,以及定义一些特殊的属性。这时候,每一个Content页都去MASTER页中添加是不现实,不合理的,因此,就需要在当前CONTENT页中进行定义。那么此时又不能违反一个页面中只能有一个SM(~~~)控件的原则,就只能通过SMP的方式来进行了。

 

当然,我想如果不需要特殊的跟母版页不能满足的定义的时候,就可以将SMP控件干脆省略了。