Desativar ScriptManager em determinadas páginas
-
21-08-2019 - |
Pergunta
Eu tenho um gerente de script na minha página principal. Há um ou 2 páginas de conteúdo que eu preciso remover o webresourse.axd de, como ele está causando problemas com outro javascript na página
Como posso desativar o gerente roteiro nestas páginas?
O objeto ScriptManager does not parecem ter todas as propriedades que se afigura como eles iriam fazer o trabalho
Isso é possível?
Solução
Mover sua
<foo:MyScriptManager id="scriptManager" runat="server" Visible="false" />
Você poderia talvez até mesmo adicionar uma propriedade ao seu MasterPage que você poderia usar em suas páginas de conteúdo para mostrar / ocultar o 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;
...
}
Como a maioria de suas páginas exigem o ScriptManager, pode ser uma idéia para torná-lo padrão para true - Eu acho que você pode fazer isso no construtor do método Page_Init de seu Mestre Página:
public SiteMaster() {
...
ShowScriptManager = true;
...
}
// Or alternatively
private void Page_Init(object sender, EventArgs e) {
...
ShowScriptManager = true;
...
}
Então, se você definir o MasterType em suas páginas de conteúdo:
<%@ MasterType VirtualPath="~/path/to/master/page" %>
Você só precisa fazer algo assim no conteúdo da página de Page_Load :
Master.ShowScriptManager = false;
Outras dicas
Você também pode colocar o gerente de script em um ContentPlaceHolder,
<asp:ContentPlaceHolder ID="cph_ScriptManager" runat="server"></asp:ContentPlaceHolder>
<asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
</asp:ContentPlaceHolder>
e nas páginas que deseja removê-lo, ter um asp: ponto de tag de conteúdo para ele, e ele irá removê-lo da página:
<asp:Content ID="content_SM_Overrride" ContentPlaceHolderID="cph_ScriptManager" runat="server">
<!-- ScriptManager Not Needed on this ASPX -->
</asp:Content>
Gostaria de usar páginas mestras aninhadas. Um mestre de base que tem a sua marcação com um espaço reservado de conteúdo extra, onde o gerente roteiro seria. Em seguida, duas versões do mestre aninhada, um com um gerente de script e um sem. E suas páginas usar a página mestra aninhada apropriada.
Eu estou deixando no texto abaixo para que os comentários fazer sentido, mas isso não funciona ...
Como sobre isto:
-Coloque um AppSetting em sua webconfig com uma lista de URI do que você não quer ter um gerente de script.
-No manipulador de eventos Page_Init do mestre, conseguir que coleta e teste para ver se a solicitação da página atual está na lista. Se assim for, remova o scriptmanager da coleção controles do mestre.
ou seja, no código da página mestre por trás:
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
Nota: Há um monte de perigo no que você está fazendo. Se a sua página principal tem quaisquer painéis de atualização, ou qualquer uma das páginas que você está removendo o gerente de tê-los, eles vão bombardear fora. Você poderia loop através da coleção de controle do mestre ea página nos masters o init e de verificação para qualquer painéis de atualização também. Embora, eu não sei o que você faria se você os encontrou. A remoção deles provavelmente iria remover qualquer conteúdo nelas. Na melhor das hipóteses, você poderia 1) Não remova o Script Manager se um painel de atualização é encontrada, ou 2) Personalize o erro.