Отключить ScriptManager на определенных страницах - PullRequest
4 голосов
/ 29 июня 2009

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

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

Похоже, что объект ScriptManager не имеет каких-либо свойств, которые могли бы выполнять работу

Возможно ли это?

Ответы [ 4 ]

7 голосов
/ 29 июня 2009

Переместите в пользовательский элемент управления, например. 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, возможно, было бы целесообразно установить для него значение по умолчанию 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;
4 голосов
/ 29 июня 2009

Вы также можете поместить менеджер скриптов в 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 голос
/ 07 февраля 2012

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

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

Свойство ScriptManager.AjaxFrameworkMode

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

0 голосов
/ 29 июня 2009

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

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

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

-Поставьте в ваш 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

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

...