在某些页面上禁用ScriptManager

时间:2009-06-29 11:51:08

标签: asp.net asp.net-ajax scriptmanager

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

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

ScriptManager对象似乎没有任何看似他们会完成工作的属性

这可能吗?

4 个答案:

答案 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)自定义错误。