4

我的母版页上有一个脚本管理器。我需要从一两个内容页面中删除 webresource.axd,因为它会导致页面上的其他 javascript 出现问题

如何禁用这些页面上的脚本管理器?

ScriptManager 对象似乎没有任何似乎可以完成这项工作的属性

这可能吗?

4

4 回答 4

7

将您的<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;
于 2009-06-29T12:26:27.947 回答
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>
于 2009-06-29T14:44:42.520 回答
1

对于任何最终来到这里但仍然无法使用 UserControl 的人......

如果您使用的是 .Net 4.0,您可以使用新的 AjaxFrameworkMode 属性并将其设置为 Disabled。

ScriptManager.AjaxFrameworkMode 属性

希望对某人有所帮助!

于 2012-02-07T12:52:34.640 回答
0

我会使用嵌套母版页。一个基础母版,其中包含您的标记以及脚本管理器所在的额外内容占位符。然后是嵌套母版的两个版本,一个带有脚本管理器,一个没有。并且您的页面使用适当的嵌套母版页。

我将留在下面的文字中,因此评论有意义,但这不起作用...

这个怎么样:

- 在您的 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) 自定义错误。

于 2009-06-29T11:56:43.780 回答