如果在BasePage中加载,UpdatePanel找不到ScriptManager
本文关键字:UpdatePanel 找不到 ScriptManager 加载 BasePage 如果 | 更新日期: 2023-09-27 18:28:43
平台:asp.net 4.0
我从基类加载scriptmanager,用于自定义cdn处理和在页面中插入脚本以及其他自定义内容。
问题是,当我插入UpdatePanel时,它找不到脚本管理器,因为UpdatePanel会提前搜索它。
有没有一个解决方案不意味着从basePage中删除ScriptManager。
该类来自我们的自定义实用程序dll
public abstract class OurFrameworkBasePage:Page
{
protected override void OnInit(EventArgs e)
{
CurrentScriptManager = BuildScriptManager();
Form.Controls.AddAt(0, CurrentScriptManager);
base.OnInit(e);
}
private ScriptManager BuildScriptManager()
{
return new ScriptManager
{
//some scriptmanager settings
};
}
protected ScriptManager CurrentScriptManager { get; set; }
}
这是特定站点的基本页面
public abstract class SiteBasePage:OurFrameworkBasePage
{
//some custom methods and utility for a specific site
}
default.aspx页面
<html>
<head runat="server"><title></title></head>
<body>
<form id="form1" runat="server">
<div>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Literal runat="server" ID="ltr"></asp:Literal>
<asp:Button runat="server" OnClick="btnOkClick" ID="btnOk" Text="ok"/>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
希望您能够控制您的框架类,因为这将解决您的问题:
protected override ControlCollection CreateControlCollection()
{
CurrentScriptManager = BuildScriptManager();
ControlCollection pageControls = base.CreateControlCollection();
pageControls.AddAt(0, CurrentScriptManager);
return pageControls;
}
protected override void OnInit(EventArgs e)
{
Form.Controls.AddAt(0, CurrentScriptManager);
base.OnInit(e);
}
需要同时在两个地方。首先,在CreateControlCollection中,使其与所有其他控件一起创建。其次,在OnInit中,因为ScriptManager需要驻留在一个带有runat="server"的表单中
GuthMD的解决方案非常棒。
与此同时,我找到了另一个解决方案,以满足不同的需求,我写在那里供参考。
我的解决方案意味着,如果你想用updatePanel处理回发,你必须在aspx页面中放置scriptmanager标记,否则scriptmanager将以编程方式插入脚本引用
protected override void OnInit(EventArgs e)
{
CurrentScriptManager = BuildScriptManager();
base.OnInit(e);
}
private ScriptManager BuildScriptManager()
{
ScriptManager rtn;
var script = Items[typeof (ScriptManager)];
if (script == null)
{
rtn = new ScriptManager
{
EnablePartialRendering = false
};
Form.Controls.AddAt(0, rtn);
}
else
{
rtn = (ScriptManager) script;
}
rtn.EnablePageMethods = false;
rtn.AjaxFrameworkMode = AjaxFrameworkMode.Disabled;
rtn.EnableCdn = true;
return rtn;
}