我的母版页上有一个脚本管理器。我需要从一两个内容页面中删除 webresource.axd,因为它会导致页面上的其他 javascript 出现问题
如何禁用这些页面上的脚本管理器?
ScriptManager 对象似乎没有任何似乎可以完成这项工作的属性
这可能吗?
我的母版页上有一个脚本管理器。我需要从一两个内容页面中删除 webresource.axd,因为它会导致页面上的其他 javascript 出现问题
如何禁用这些页面上的脚本管理器?
ScriptManager 对象似乎没有任何似乎可以完成这项工作的属性
这可能吗?
将您的<asp:ScriptManager />移动到自定义控件,例如 MyScriptManager.ascx - .ascx 文件中的唯一代码将是 ScriptManager 标记 - 然后您可以在自定义控件上设置Visible属性来控制是否呈现 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 可能是一个想法 - 我认为您可以在母版页的 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;
您还可以将脚本管理器放入 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>
对于任何最终来到这里但仍然无法使用 UserControl 的人......
如果您使用的是 .Net 4.0,您可以使用新的 AjaxFrameworkMode 属性并将其设置为 Disabled。
ScriptManager.AjaxFrameworkMode 属性
希望对某人有所帮助!
我会使用嵌套母版页。一个基础母版,其中包含您的标记以及脚本管理器所在的额外内容占位符。然后是嵌套母版的两个版本,一个带有脚本管理器,一个没有。并且您的页面使用适当的嵌套母版页。
我将留在下面的文字中,因此评论有意义,但这不起作用...
这个怎么样:
- 在您的 webconfig 中放置一个应用程序设置,其中包含您不想拥有脚本管理器的 URI 列表。
- 在 master 的 page_init 事件处理程序中,获取该集合并测试以查看当前页面请求是否在列表中。如果是这样,请从主控器的控件集合中删除脚本管理器。
即,在母版页代码后面:
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
注意:你正在做的事情有很多危险。如果您的母版页有任何更新面板,或者您要删除管理器的任何页面都有它们,它们就会被炸毁。您可以遍历 master 的控件集合和 masters init 中的页面,并检查是否有任何更新面板。虽然,我不确定如果你找到它们你会怎么做。删除它们可能会删除其中的任何内容。充其量,您可以 1) 如果找到更新面板,则不删除脚本管理器,或者 2) 自定义错误。