我的母版页面上有一个脚本管理器。我需要一个或两个内容页面来删除webresourse.axd,因为它会导致页面上的其他JavaScript出现问题
如何在这些页面上禁用脚本管理器?
ScriptManager对象似乎没有任何看似他们会完成工作的属性
这可能吗?
答案 0 :(得分:7)
将您的< asp:ScriptManager /> 移至自定义控件,例如MyScriptManager.ascx - .ascx文件中唯一的代码是ScriptManager标记 - 然后您可以在自定义控件上设置可见属性,以控制是否渲染ScriptManager。
<foo:MyScriptManager id="scriptManager" runat="server" Visible="false" />
您甚至可以在MasterPage中添加一个属性,您可以在内容页面中使用该属性来显示/隐藏ScriptManager:
// In your master page
public bool ShowScriptManager {get; set;}
// In your master page's Page_Load
private void Page_Load(object sender, EventArgs e) {
...
scriptManager.Visible = ShowScriptManager;
...
}
由于您的大多数页面都需要ScriptManager,因此可能会将其默认设置为true - 我认为您可以在Master Page的Page_Init方法构造函数中执行此操作:
public SiteMaster() {
...
ShowScriptManager = true;
...
}
// Or alternatively
private void Page_Init(object sender, EventArgs e) {
...
ShowScriptManager = true;
...
}
然后,如果您在内容页面中设置了MasterType:
<%@ MasterType VirtualPath="~/path/to/master/page" %>
您只需要在内容页面的 Page_Load 中执行以下操作:
Master.ShowScriptManager = false;
答案 1 :(得分:4)
您也可以将脚本管理器放入ContentPlaceHolder,
<asp:ContentPlaceHolder ID="cph_ScriptManager" runat="server"></asp:ContentPlaceHolder>
<asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
</asp:ContentPlaceHolder>
并在要删除它的页面上,有一个asp:Content标记点,它将从页面中删除它:
<asp:Content ID="content_SM_Overrride" ContentPlaceHolderID="cph_ScriptManager" runat="server">
<!-- ScriptManager Not Needed on this ASPX -->
</asp:Content>
答案 2 :(得分:1)
对于那些在这里结束但仍无法使用UserControl的人来说......
如果您使用的是.Net 4.0,则可以使用新的AjaxFrameworkMode属性并将其设置为Disabled。
ScriptManager.AjaxFrameworkMode Property
希望能帮助别人!
答案 3 :(得分:0)
我会使用嵌套母版页。具有标记的基本主数据,其中包含脚本管理器所需的额外内容占位符。然后是嵌套主服务器的两个版本,一个是脚本管理器,另一个是没有。您的页面使用适当的嵌套母版页。
我将在下面的文字中留下,以便评论有意义,但这不起作用......
这个怎么样:
- 在您的webconfig中设置一个appsetting,其中包含您不希望拥有脚本管理器的URI列表。
- 在master的page_init事件处理程序中,获取该集合并测试以查看当前页面请求是否在列表中。如果是这样,请从master的控件集合中删除scriptmanager。
即,在后面的母版页代码中:
Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If DirectCast(Page, System.Web.UI.Page).AppRelativeVirtualPath = "~/Test.aspx" Then
Me.Controls.Remove(Me.FindControl("ScriptManager1"))
End If
End Sub
注意:你正在做的事情有很多危险。如果您的母版页有任何更新面板,或者您要删除管理器的任何页面都有它们,它们将会爆炸。您可以遍历主服务器的控件集合和主服务器init中的页面,并检查任何更新面板。虽然,我不确定如果找到它们你会怎么做。删除它们可能会删除其中的任何内容。充其量,您可以1)如果找到更新面板,则不删除脚本管理器,或者2)自定义错误。