本人初学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);
}
}
/// 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);
}
}