2009-06-29 46 views
4

我的主页面上有一个脚本管理器。有一个或两个内容页面,我需要从中删除webresourse.axd,因为它导致页面上其他JavaScript的问题禁用某些页面上的ScriptManager

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

使用ScriptManager对象犯规似乎有这似乎像他们会做的工作

这是任何可能的属性?

回答

7

将您的< asp:ScriptManager/>移动到自定义控件例如, MyScriptManager.ascx - .ascx文件中唯一的代码将是ScriptManager标记 - 然后您可以在自定义控件上设置Visible属性,以控制是否呈现ScriptManager。

<foo:MyScriptManager id="scriptManager" runat="server" Visible="false" /> 

也许你可以甚至可以添加属性到你的母版,你可以在你的内容页面用来显示/隐藏的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的,它可能是一个想法,使其默认为真 - 我认为你可以在你的母版页的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; 
0

我会使用嵌套的母版页。一个基本的母版,其中有一个额外的内容占位符,其中脚本管理器就是你的标记。然后是两个嵌套的主版本,一个带有脚本管理器,另一个没有。您的网页使用适当的嵌套母版页。

我要离开的文字下面这样的评论是有意义的,但是这并不工作...

如何:

-put在webconfig的appsetting与列表您不希望拥有脚本管理器的URI。
- 在主服务器的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和init页面的控制集合,并检查是否有更新面板。虽然,我不确定如果你找到它们你会怎么做。删除它们可能会删除它们中的任何内容。充其量,您可以1)如果找到更新面板,则不要删除脚本管理器,或者2)自定义错误。

+1

这可能会导致包含更新面板的页面发生错误。 – Kirtan 2009-06-29 12:05:32

+0

同意,在您打算删除脚本管理器的页面上,您不应该有更新面板。但是这个问题是在他的问题中继承的:换句话说,任何页面都会删除脚本管理器,这就是他要求的。 – 2009-06-29 12:35:13

+0

是的 - 我正在寻找如何删除脚本管理器。 我havwe尝试以下 ScriptManager sm =(ScriptManager)Master.FindControl(“sm”); sm.Visible = false; 但出现错误: 该方法或操作未实现。 所以问题很简单: 如何从页面中删除脚本管理器 有没有更新面板或类似的问题 – ChrisCa 2009-06-29 13:16:26

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> 
1

对于任何人谁在这里结束了,但仍无法得到它与用户控件工作...

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

ScriptManager.AjaxFrameworkMode Property

希望帮助别人!