Отключить ScriptManager на определенных страницах

У меня есть менеджер сценариев на моей главной странице. Есть одна или две страницы содержимого, с которых мне нужно удалить webresourse.axd, поскольку он вызывает проблемы с другим javascript на странице.

Как на этих страницах отключить диспетчер скриптов?

Объект ScriptManager, похоже, не имеет каких-либо свойств, которые, казалось бы, будут выполнять свою работу.

Это возможно?


person ChrisCa    schedule 29.06.2009    source источник


Ответы (4)


Переместите свой ‹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;
person Ian Oxley    schedule 29.06.2009
comment
Мальчик Атта. Хорошее решение. Я потратил 4 часа на эксперименты, чтобы найти такое же решение. Я должен был прийти сюда первым! - person Ian Patrick Hughes; 10.03.2010
comment
Если в моем iframe присутствует ScriptManager, я всегда получаю ошибку javascript для удаления страницы, когда пытаюсь загрузить файл PDF в iframe. Ваша техника позволяет мне делать это плавно и избегать ошибок. Спасибо! - person ConnorsFan; 09.12.2014

Вы также можете поместить диспетчер сценариев в 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>
person BigBlondeViking    schedule 29.06.2009

Для тех, кто попадает сюда и все еще не может заставить его работать с UserControl ...

Если вы используете .Net 4.0, вы можете использовать новое свойство AjaxFrameworkMode и установить для него значение Disabled.

Свойство ScriptManager.AjaxFrameworkMode

Надеюсь, это кому-то поможет!

person JamPickle    schedule 07.02.2012
comment
Спасибо, это должен быть ответ! - person paddingtonMike; 07.09.2016

Я бы использовал вложенные главные страницы. Базовый мастер, в котором есть ваша разметка, с дополнительным заполнителем содержимого, где будет находиться менеджер сценариев. Затем две версии вложенного мастера, одна с менеджером скриптов, а другая без. И ваши страницы используют соответствующую вложенную главную страницу.

Я оставляю текст ниже, чтобы комментарии имели смысл, но это не работает ...

Как насчет этого:

-Поместите приложение в свой webconfig со списком URI, которые вы не хотите использовать в диспетчере сценариев.
-В обработчике событий 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

Примечание. В том, что вы делаете, много опасностей. Если на вашей главной странице есть какие-либо панели обновлений или они есть на любой из страниц, на которых вы удаляете менеджер, они вылетят из строя. Вы можете пройти через контрольную коллекцию мастера и страницу в мастере init, а также проверить наличие каких-либо панелей обновления. Хотя я не уверен, что бы вы сделали, если бы нашли их. Их удаление, скорее всего, приведет к удалению любого содержимого в них. В лучшем случае вы можете либо 1) не удалять диспетчер сценариев, если обнаружена панель обновления, или 2) настроить ошибку.

person Tim Hoolihan    schedule 29.06.2009
comment
согласен, на страницах, которые вы планируете удалить диспетчер скриптов, у вас не должно быть панели обновлений. но эта проблема унаследована от его вопроса: другими словами, это проблема с любой страницей, которая удаляет диспетчер сценариев, и это то, что он просит сделать. - person Tim Hoolihan; 29.06.2009
comment
да - ищу как убрать диспетчер скриптов. Я пробовал следующий ScriptManager sm = (ScriptManager) Master.FindControl (sm); sm.Visible = false; но это дает ошибку: метод или операция не реализованы. Итак, вопрос прост: как удалить диспетчер скриптов со страницы? На рассматриваемых страницах нет панелей обновлений или чего-то подобного. - person ChrisCa; 29.06.2009
comment
Спасибо за это. Он по-прежнему отображает scriptrersource.axd. Я также пробовал Master.Controls.Remove (Master.FindControl (sm)); но это не помогло хмммм ... назад к чертежной доске, я думаю - person ChrisCa; 29.06.2009
comment
Я понимаю что ты имеешь ввиду. Я попробовал ScriptManager1.Scripts.Clear () в init, load и pre_render и не смог заставить скрипт не отображаться на странице. Я добавлю еще один метод выше - person Tim Hoolihan; 29.06.2009