【发布时间】:2010-11-06 16:08:43
【问题描述】:
我的母版页上有一个脚本管理器。我需要从中删除一到两个内容页面,因为它会导致页面上的其他 javascript 出现问题
如何禁用这些页面上的脚本管理器?
ScriptManager 对象似乎没有任何看起来可以完成这项工作的属性
这可能吗?
【问题讨论】:
标签: asp.net asp.net-ajax scriptmanager
我的母版页上有一个脚本管理器。我需要从中删除一到两个内容页面,因为它会导致页面上的其他 javascript 出现问题
如何禁用这些页面上的脚本管理器?
ScriptManager 对象似乎没有任何看起来可以完成这项工作的属性
这可能吗?
【问题讨论】:
标签: asp.net asp.net-ajax 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 Property
希望对某人有所帮助!
【讨论】:
我会使用嵌套母版页。一个基础母版,其中包含您的标记以及脚本管理器所在的额外内容占位符。然后是嵌套母版的两个版本,一个带有脚本管理器,一个没有。并且您的页面使用适当的嵌套母版页。
我将留在下面的文字中,以便 cmets 有意义,但这不起作用...
这个怎么样:
-在您的 webconfig 中放置一个应用程序设置,其中包含您不希望拥有脚本管理器的 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
注意:你正在做的事情有很多危险。如果您的母版页有任何更新面板,或者您要删除管理器的任何页面都有它们,它们就会被炸毁。您可以遍历 master 的控件集合和 masters init 中的页面,并检查是否有任何更新面板。虽然,我不确定如果你找到它们你会怎么做。删除它们可能会删除其中的任何内容。充其量,您可以 1) 如果找到更新面板,则不删除脚本管理器,或者 2) 自定义错误。
【讨论】: