ASP.NET AJAX - ScriptManagerProxy因何而存在?

本人初学AJAX,有错误还望指正:)

看本文前,前先了解http://www.cnblogs.com/liminzhang/archive/2006/11/21/567351.html

顾名思义,ScriptManagerProxy就是ScriptManager控件的代理者,因为一个页面只能有一个ScriptManager。

为什么一个页面只能有一个ScriptManager呢?我猜想是由于引用的公共JS的问题才作出这个限制的,被ScriptManager引入的公用JS其它ScriptManager就不必再被引用,从而产生一出一个ScriptManagerProxy,当然ScriptManagerProxy不可能仅仅因为这一点原因才被设计出来,还因为主版页面(Master Pages)与内容页面(Content Pages)的存在。

关于主版页面与内容页面使用不同的Service或JS,除了
http://www.cnblogs.com/liminzhang/archive/2006/11/21/567351.html 给出的方案外还可以通过给MasterPage增加一个ScriptManager的服务接口,这样内容页面就不需要再创建ScriptManagerProxy,而动态修改ScriptManager了。

/// <summary>
/// IScriptManager 接口
/// </summary>

public interface IScriptManager
{
    Microsoft.Web.UI.ScriptManager ScriptManager 
get; }
}




/// <summary>
/// MasterPage 类实现借口
/// </summary>

public partial class MasterPage : System.Web.UI.MasterPage, IScriptManager
{
    
public Microsoft.Web.UI.ScriptManager ScriptManager
    
{
        
get
        
{
            
return this.ScriptManager1;
        }

    }


    
protected void Page_Load(object sender, EventArgs e)
    
{
        
    }

}




/// <summary>
/// 内容页通过借口访问MasterPage中的ScriptManager
/// </summary>

public partial class Default2 : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        IScriptManager sm 
= this.Master as IScriptManager;
        Microsoft.Web.UI.ServiceReference s 
= new Microsoft.Web.UI.ServiceReference();
        s.Path 
= "WebService2.asmx";
        sm.ScriptManager.Services.Add(s);
    }

}

posted @ 2006-11-21 17:46  蛤蟆  阅读(634)  评论(0编辑  收藏  举报