Páginas mestras e AJAX ASP.NET (VB)

por Scott Mitchell

Discute opções para usar ASP.NET páginas AJAX e master. Examina o uso da classe ScriptManagerProxy; discute como os vários arquivos JS são carregados dependendo se o ScriptManager é usado na página Mestra ou na página Conteúdo.

Introdução

Nos últimos anos, cada vez mais desenvolvedores vêm criando aplicativos Web habilitados para AJAX. Um site habilitado para AJAX usa várias tecnologias da Web relacionadas para oferecer uma experiência de usuário mais responsiva. Criar aplicativos de ASP.NET habilitados para AJAX é incrivelmente fácil graças à estrutura AJAX ASP.NET da Microsoft. ASP.NET AJAX é integrado ao ASP.NET 3.5 e ao Visual Studio 2008; também está disponível como um download separado para aplicativos ASP.NET 2.0.

Ao criar páginas da Web habilitadas para AJAX com o ASP.NET estrutura AJAX, você deve adicionar precisamente um controle ScriptManager a cada página que usa a estrutura. Como o nome indica, o ScriptManager gerencia o script do lado do cliente usado em páginas da Web habilitadas para AJAX. No mínimo, o ScriptManager emite HTML que instrui o navegador a baixar os arquivos JavaScript que compõem o ASP.NET Biblioteca de Clientes AJAX. Ele também pode ser usado para registrar arquivos JavaScript personalizados, serviços Web habilitados para script e funcionalidade de serviço de aplicativo personalizado.

Se seu site usa master páginas (como deveria), você não precisa necessariamente adicionar um controle ScriptManager a cada página de conteúdo; em vez disso, você pode adicionar um controle ScriptManager à página master. Este tutorial mostra como adicionar o controle ScriptManager à página master. Ele também analisa como usar o controle ScriptManagerProxy para registrar scripts personalizados e serviços de script em uma página de conteúdo específica.

Observação

Este tutorial não explora a criação ou a criação de aplicativos Web habilitados para AJAX com a estrutura ASP.NET AJAX. Para obter mais informações sobre como usar o AJAX, consulte os vídeos e tutoriais do ASP.NET AJAX, bem como os recursos listados na seção Leitura Adicional no final deste tutorial.

Examinando a marcação emitida pelo controle ScriptManager

O controle ScriptManager emite marcação que instrui o navegador a baixar os arquivos JavaScript que compõem o ASP.NET Biblioteca de Clientes AJAX. Ele também adiciona um pouco de JavaScript embutido à página que inicializa essa biblioteca. A marcação a seguir mostra o conteúdo adicionado à saída renderizada de uma página que inclui um controle ScriptManager:

<script src="/ASPNET_MasterPages_Tutorial_08_CS/WebResource.axd?d=T8EVk6SsA8mgPKu7_sBX5w2 t=633363040378379010" type="text/javascript"></script>

<script src="/ASPNET_MasterPages_Tutorial_08_CS/ScriptResource.axd?d=SCE1TCh8B24VkQIU5a8iJFizuPBIqs6Lka7GEkxo-6ROKNw5LVPCpF_pmLFR-R-p_Uf42Ahmr_SKd8lwgZUWb2uPJmfX0X_H6oLA50bniyQ1 t=633465688673751480" type="text/javascript"></script>

<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>

<script src="/ASPNET_MasterPages_Tutorial_08_CS/ScriptResource.axd?d=SCE1TCh8B24VkQIU5a8iJFizuPBIqs6Lka7GEkxo-6ROKNw5LVPCpF_pmLFR-R-phT96yZPngppiP_VXlN4Vz2RuVtvwDiQzF9xt42dUCiYjL0UylAJoyYzStwvObx0U0 t=633465688673751480" type="text/javascript"></script>

<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ScriptManager1', document.getElementById('form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls([], [], [], 90);
//]]>
</script>

<script type="text/javascript">
//<![CDATA[
Sys.Application.initialize();
//]]>
</script>

As <script src="url"></script> marcas instruem o navegador a baixar e executar o arquivo JavaScript na URL. O ScriptManager emite três marcas desse tipo; um faz referência ao arquivo WebResource.axd, enquanto os outros dois fazem referência ao arquivo ScriptResource.axd. Esses arquivos realmente não existem como arquivos em seu site. Em vez disso, quando uma solicitação para um desses arquivos chega ao servidor Web, o mecanismo de ASP.NET examina a querystring e retorna o conteúdo javaScript apropriado. O script fornecido por esses três arquivos JavaScript externos constitui o ASP.NET biblioteca de clientes da estrutura AJAX. As outras <script> marcas emitidas pelo ScriptManager incluem o script embutido que inicializa essa biblioteca.

As referências de script externo e o script embutido emitidos pelo ScriptManager são essenciais para uma página que usa o ASP.NET estrutura AJAX, mas não é necessário para páginas que não usam a estrutura. Portanto, você pode argumentar que é ideal adicionar apenas um ScriptManager às páginas que usam a estrutura ASP.NET AJAX. E isso é suficiente, mas se você tiver muitas páginas que usam a estrutura, você acabará adicionando o controle ScriptManager a todas as páginas - uma tarefa repetitiva, para dizer o mínimo. Como alternativa, você pode adicionar um ScriptManager à página master, que injeta esse script necessário em todas as páginas de conteúdo. Com essa abordagem, você não precisa se lembrar de adicionar um ScriptManager a uma nova página que usa a estrutura ASP.NET AJAX porque ela já está incluída na página master. A etapa 1 explica como adicionar um ScriptManager à página master.

Observação

Se você planeja incluir a funcionalidade do AJAX na interface do usuário de sua página master, não tem escolha no assunto. Você deve incluir o ScriptManager na página master.

Uma desvantagem de adicionar o ScriptManager à página master é que o script acima é emitido em cada página, independentemente de ser necessário. Isso claramente leva a largura de banda desperdiçada para as páginas que têm o ScriptManager incluído (por meio da página master) ainda não usam nenhum recurso da estrutura AJAX ASP.NET. Mas quanta largura de banda é desperdiçada?

  • O conteúdo real emitido pelo ScriptManager (mostrado acima) totaliza um pouco mais de 1 KB.
  • Os três arquivos de script externos referenciados pelo <script> elemento, no entanto, compreendem aproximadamente 450 KB de dados descompactados; em um site que usa compactação gzip, essa largura de banda total pode ser reduzida perto de 100 KB. No entanto, esses arquivos de script são armazenados em cache pelo navegador por um ano, o que significa que eles só precisam ser baixados uma vez e, em seguida, podem ser reutilizados em outras páginas no site.

Na melhor das hipóteses, quando os arquivos de script são armazenados em cache, o custo total é de 1 KB, o que é insignificante. Na pior das hipóteses, no entanto - que é quando os arquivos de script ainda não foram baixados e o servidor Web não está usando nenhuma forma de compactação - o hit de largura de banda é de cerca de 450 KB, que pode adicionar em qualquer lugar de um segundo ou dois em uma conexão de banda larga a até um minuto para os usuários em modems de discagem. A boa notícia é que, como os arquivos de script externos são armazenados em cache pelo navegador, esse pior cenário ocorre com pouca frequência.

Observação

Se você ainda se sentir desconfortável ao colocar o controle ScriptManager na página master, considere o Web Form (a <form runat="server"> marcação na página master). Cada página ASP.NET que usa o modelo de postback deve incluir precisamente um Web Form. Adicionar um Web Form adiciona conteúdo adicional: vários campos de formulário ocultos, a <form> marca em si e, se necessário, uma função JavaScript para iniciar um postback do script. Essa marcação é desnecessária para páginas que não postam o postback. Essa marcação desnecessária pode ser eliminada removendo o Web Form da página master e adicionando-o manualmente a cada página de conteúdo que precisa de uma. No entanto, os benefícios de ter o Web Form na página master superam as desvantagens de adição desnecessária a determinadas páginas de conteúdo.

Etapa 1: Adicionar um controle ScriptManager à página mestra

Cada página da Web que usa a estrutura ASP.NET AJAX deve conter precisamente um controle ScriptManager. Devido a esse requisito, geralmente faz sentido colocar um único controle ScriptManager na página master para que todas as páginas de conteúdo tenham o controle ScriptManager incluído automaticamente. Além disso, o ScriptManager deve vir antes de qualquer um dos controles de servidor AJAX ASP.NET, como os controles UpdatePanel e UpdateProgress. Portanto, é melhor colocar o ScriptManager antes de qualquer controle ContentPlaceHolder no Formulário da Web.

Abra a Site.master página master e adicione um controle ScriptManager à página dentro do Web Form, mas antes do <div id="topContent"> elemento (consulte a Figura 1). Se você estiver usando o Visual Web Developer 2008 ou o Visual Studio 2008, o controle ScriptManager estará localizado na Caixa de Ferramentas na guia Extensões AJAX. Se você estiver usando o Visual Studio 2005, precisará primeiro instalar o ASP.NET estrutura AJAX e adicionar os controles à Caixa de Ferramentas. Visite a página de download do ASP.NET AJAX para obter a estrutura do ASP.NET 2.0.

Depois de adicionar o ScriptManager à página, altere-o ID de ScriptManager1 para MyManager.

Adicionar o ScriptManager à Página Mestra

Figura 01: Adicionar o ScriptManager à Página Mestra (clique para exibir a imagem em tamanho real)

Etapa 2: Usando o ASP.NET AJAX Framework de uma página de conteúdo

Com o controle ScriptManager adicionado à página master agora podemos adicionar ASP.NET funcionalidade da estrutura AJAX a qualquer página de conteúdo. Vamos criar uma nova página ASP.NET que exibe um produto selecionado aleatoriamente do banco de dados Northwind. Usaremos o controle Timer da estrutura ASP.NET AJAX para atualizar essa exibição a cada 15 segundos, mostrando um novo produto.

Comece criando uma nova página no diretório raiz chamado ShowRandomProduct.aspx. Não se esqueça de associar essa nova página à página master Site.master .

Adicionar uma nova página de ASP.NET ao site

Figura 02: Adicionar uma nova página de ASP.NET ao site (clique para exibir a imagem em tamanho real)

Lembre-se de que, no tutorial Especificando o título, meta tags e outros cabeçalhos HTML na página mestra[SKM1], criamos uma classe de página base personalizada chamada BasePage que gerou o título da página se ela não foi definida explicitamente. Vá para a ShowRandomProduct.aspx classe code-behind da página e faça com que ela derive de BasePage (em vez de ).System.Web.UI.Page

Por fim, atualize o Web.sitemap arquivo para incluir uma entrada para esta lição. Adicione a seguinte marcação abaixo da <siteMapNode> lição de Interação mestre à página de conteúdo:

<siteMapNode url="~/ShowRandomProduct.aspx" title="Master Pages and ASP.NET AJAX" />

A adição desse <siteMapNode> elemento é refletida na lista Lições (consulte a Figura 5).

Exibindo um produto selecionado aleatoriamente

Retorne para ShowRandomProduct.aspx. No Designer, arraste um controle UpdatePanel da Caixa de Ferramentas para o MainContent controle Conteúdo e defina sua ID propriedade ProductPanelcomo . O UpdatePanel representa uma região na tela que pode ser atualizada de forma assíncrona por meio de um postback de página parcial.

Nossa primeira tarefa é exibir informações sobre um produto selecionado aleatoriamente no UpdatePanel. Comece arrastando um controle DetailsView para o UpdatePanel. Defina a propriedade do ID controle DetailsView como ProductInfo e limpe suas Height propriedades e Width . Expanda a marca inteligente detailsView e, na lista suspensa Escolher Fonte de Dados, escolha associar o DetailsView a um novo controle SqlDataSource chamado RandomProductDataSource.

Associar o DetailsView a um novo controle SqlDataSource

Figura 03: Associar o DetailsView a um novo controle SqlDataSource (clique para exibir a imagem em tamanho real)

Configure o controle SqlDataSource para se conectar ao banco de dados Northwind por meio do NorthwindConnectionString (que criamos no tutorial Interagindo com a Página Mestra da Página de Conteúdo[SKM2]). Ao configurar a instrução select, escolha especificar uma instrução SQL personalizada e insira a seguinte consulta:

SELECT TOP 1 ProductName, UnitPrice
FROM Products
ORDER BY NEWID()

O TOP 1 palavra-chave na SELECT cláusula retorna apenas o primeiro registro retornado pela consulta. A NEWID() função gera um novo GUID (valor de identificador global exclusivo) e pode ser usada em uma ORDER BY cláusula para retornar os registros da tabela em uma ordem aleatória.

Configurar o SqlDataSource para retornar um único registro selecionado aleatoriamente

Figura 04: Configurar o SqlDataSource para retornar um registro único selecionado aleatoriamente (clique para exibir a imagem em tamanho real)

Depois de concluir o assistente, o Visual Studio cria um BoundField para as duas colunas retornadas pela consulta acima. Neste ponto, a marcação declarativa da página deve ser semelhante à seguinte:

<asp:UpdatePanel ID="ProductPanel" runat="server">
 <ContentTemplate>
 <asp:DetailsView ID="ProductInfo" runat="server" AutoGenerateRows="False" 
 DataSourceID="RandomProductDataSource">
 <Fields>
 <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
 SortExpression="ProductName" />
 <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" 
 SortExpression="UnitPrice" />
 </Fields>
 </asp:DetailsView>
 <asp:SqlDataSource ID="RandomProductDataSource" runat="server" 
 ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT TOP 1 ProductName, UnitPrice FROM Products ORDER BY NEWID()"></asp:SqlDataSource>
 </ContentTemplate>
</asp:UpdatePanel>

A Figura 5 mostra a ShowRandomProduct.aspx página quando exibida por meio de um navegador. Clique no botão Atualizar do navegador para recarregar a página; você deverá ver os ProductName valores e UnitPrice de um novo registro selecionado aleatoriamente.

O nome e o preço de um produto aleatório são exibidos

Figura 05: O nome e o preço de um produto aleatório são exibidos (clique para exibir a imagem em tamanho real)

Exibindo automaticamente um novo produto a cada 15 segundos

A estrutura ASP.NET AJAX inclui um controle Timer que executa um postback em um momento especificado; no postback, o evento do Tick Temporizador é gerado. Se o controle Timer for colocado em um UpdatePanel, ele disparará um postback de página parcial, durante o qual podemos reassociar os dados ao DetailsView para exibir um novo produto selecionado aleatoriamente.

Para fazer isso, arraste um Temporizador da Caixa de Ferramentas e solte-o no UpdatePanel. Altere o timer de IDTimer1 para ProductTimer e sua Interval propriedade de 60000 para 15000. A Interval propriedade indica o número de milissegundos entre postbacks; defini-lo como 15000 faz com que o Temporizador dispare um postback de página parcial a cada 15 segundos. Neste ponto, a marcação declarativa do Temporizador deve ser semelhante à seguinte:

<asp:UpdatePanel ID="ProductPanel" runat="server" onload="ProductPanel_Load">
 <ContentTemplate>
 ...

 <asp:Timer ID="ProductTimer" runat="server" Interval="15000">
 </asp:Timer>
 </ContentTemplate>
</asp:UpdatePanel>

Crie um manipulador de eventos para o evento do Tick Temporizador. Nesse manipulador de eventos, precisamos reassociar os dados ao DetailsView chamando o método detailsview DataBind . Isso instrui o DetailsView a recuperar novamente os dados de seu controle de fonte de dados, que selecionará e exibirá um novo registro selecionado aleatoriamente (assim como ao recarregar a página clicando no botão Atualizar do navegador).

Protected Sub ProductTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ProductTimer.Tick
 ProductInfo.DataBind()
End Sub

Isso é tudo! Reveja a página por meio de um navegador. Inicialmente, as informações de um produto aleatório são exibidas. Se você watch pacientemente a tela, observará que, após 15 segundos, as informações sobre um novo produto substituem magicamente a exibição existente.

Para ver melhor o que está acontecendo aqui, vamos adicionar um controle Label ao UpdatePanel que exibe a hora em que a exibição foi atualizada pela última vez. Adicione um controle Web Label no UpdatePanel, defina como IDLastUpdateTimee desmarque sua Text propriedade. Em seguida, crie um manipulador de eventos para o evento updatePanel Load e exiba a hora atual no Rótulo. (O evento updatePanel Load é acionado em cada postback de página completa ou parcial.)

Protected Sub ProductPanel_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles ProductPanel.Load
 LastUpdateTime.Text = "Last updated at " & DateTime.Now.ToLongTimeString()
End Sub

Com essa alteração concluída, a página inclui a hora em que o produto exibido no momento foi carregado. A Figura 6 mostra a página quando visitada pela primeira vez. A Figura 7 mostra a página 15 segundos depois que o controle Temporizador está "marcado" e o UpdatePanel foi atualizado para exibir informações sobre um novo produto.

Um produto selecionado aleatoriamente é exibido no carregamento da página

Figura 06: Um produto selecionado aleatoriamente é exibido na carga da página (clique para exibir a imagem em tamanho real)

A cada 15 segundos, um novo produto selecionado aleatoriamente é exibido

Figura 07: a cada 15 segundos, um novo produto selecionado aleatoriamente é exibido (clique para exibir a imagem em tamanho real)

Etapa 3: Usando o controle ScriptManagerProxy

Além de incluir o script necessário para a biblioteca de clientes da estrutura ASP.NET AJAX, o ScriptManager também pode registrar arquivos JavaScript personalizados, referências a serviços Web habilitados para script e serviços de autenticação, autorização e perfil personalizados. Normalmente, essas personalizações são específicas para uma determinada página. No entanto, se os arquivos de script personalizados, as referências do Serviço Web ou os serviços de autenticação, autorização ou perfil forem referenciados no ScriptManager na página master, eles serão incluídos em todas as páginas do site.

Para adicionar personalizações relacionadas ao ScriptManager em uma base página por página, use o controle ScriptManagerProxy. Você pode adicionar um ScriptManagerProxy a uma página de conteúdo e registrar o arquivo JavaScript personalizado, a referência do Serviço Web ou o serviço de autenticação, autorização ou perfil do ScriptManagerProxy; isso tem o efeito de registrar esses serviços para a página de conteúdo específica.

Observação

Uma página ASP.NET só pode ter um controle ScriptManager presente. Portanto, você não poderá adicionar um controle ScriptManager a uma página de conteúdo se o controle ScriptManager já estiver definido na página master. A única finalidade do ScriptManagerProxy é fornecer uma maneira para os desenvolvedores definirem o ScriptManager na página master, mas ainda têm a capacidade de adicionar personalizações scriptManager em uma base página por página.

Para ver o controle ScriptManagerProxy em ação, vamos aumentar o UpdatePanel ShowRandomProduct.aspx para incluir um botão que usa o script do lado do cliente para pausar ou retomar o controle Timer. O controle Timer tem três métodos do lado do cliente que podemos usar para obter essa funcionalidade desejada:

  • _startTimer() – inicia o controle Timer
  • _raiseTick() - faz com que o controle de temporizador "tick", postando de volta e levantando seu evento Tick no servidor
  • _stopTimer() – interrompe o controle Temporizador

Vamos criar um arquivo JavaScript com uma variável chamada timerEnabled e uma função chamada ToggleTimer. A timerEnabled variável indica se o controle Timer está habilitado ou desabilitado no momento; o padrão é true. A ToggleTimer função aceita dois parâmetros de entrada: uma referência ao botão Pausar/Retomar e ao valor do lado id do cliente do controle Timer. Essa função alterna o valor de timerEnabled, obtém uma referência ao controle Timer, inicia ou interrompe o Temporizador (dependendo do valor de timerEnabled) e atualiza o texto de exibição do botão para "Pausar" ou "Retomar". Essa função será chamada sempre que o botão Pausar/Retomar for clicado.

Comece criando uma nova pasta no site chamado Scripts. Em seguida, adicione um novo arquivo à pasta Scripts chamada TimerScript.js do tipo Arquivo JScript.

Adicionar um novo arquivo JavaScript à pasta Scripts

Figura 08: Adicionar um novo arquivo JavaScript à Scripts pasta (clique para exibir a imagem em tamanho real)

Um novo arquivo JavaScript foi adicionado ao site

Figura 09: Um novo arquivo JavaScript foi adicionado ao site (clique para exibir a imagem em tamanho real)

Em seguida, adicione o seguinte scrip ao TimerScript.js arquivo:

var timerEnabled = true;
function ToggleTimer(btn, timerID)
{
    // Toggle the timer enabled state
    timerEnabled = !timerEnabled;

    // Get a reference to the Timer
    var timer = $find(timerID);

    if (timerEnabled)
    {
        // Start timer
        timer._startTimer();

        // Immediately raise a tick
        timer._raiseTick();

        btn.value = 'Pause';
    }
    else
    {
        // Stop timer
        timer._stopTimer();

        btn.value = 'Resume';
    }
}

Agora precisamos registrar esse arquivo JavaScript personalizado no ShowRandomProduct.aspx. Retorne a ShowRandomProduct.aspx e adicione um controle ScriptManagerProxy à página; defina como IDMyManagerProxy. Para registrar um arquivo JavaScript personalizado, selecione o controle ScriptManagerProxy no Designer e vá para o janela Propriedades. Uma das propriedades é intitulada Scripts. Selecionar essa propriedade exibe a coleção ScriptReference Editor mostrada na Figura 10. Clique no botão Adicionar para incluir uma nova referência de script e, em seguida, insira o caminho para o arquivo de script na propriedade Path: ~/Scripts/TimerScript.js.

Adicionar uma referência de script ao controle ScriptManagerProxy

Figura 10: Adicionar uma referência de script ao controle ScriptManagerProxy (clique para exibir a imagem em tamanho real)

Depois de adicionar a referência de script, a marcação declarativa do controle ScriptManagerProxy é atualizada para incluir uma <Scripts> coleção com uma única ScriptReference entrada, como ilustra o snippet de marcação a seguir:

<asp:ScriptManagerProxy ID="MyManagerProxy" runat="server">
 <Scripts>
 <asp:ScriptReference Path="~/Scripts/TimerScript.js" />
 </Scripts>
</asp:ScriptManagerProxy>

A ScriptReference entrada instrui o ScriptManagerProxy a incluir uma referência ao arquivo JavaScript em sua marcação renderizada. Ou seja, ao registrar o script personalizado no ScriptManagerProxy, a ShowRandomProduct.aspx saída renderizada da página agora inclui outra <script src="url"></script> marca: <script src="Scripts/TimerScript.js" type="text/javascript"></script>.

Agora podemos chamar a ToggleTimer função definida em TimerScript.js do script do cliente na ShowRandomProduct.aspx página. Adicione o seguinte HTML no UpdatePanel:

<input type="button" id="PauseResumeButton" 
    value="Pause" 
    onclick="ToggleTimer(this, '<%=ProductTimer.ClientID %>');" />

Isso exibe um botão com o texto "Pausar". Sempre que ele é clicado, a função ToggleTimer JavaScript é chamada, passando uma referência para o botão e o id valor do controle Timer (ProductTimer). Observe a sintaxe para obter o id valor do controle Timer. <%=ProductTimer.ClientID%> emite o valor da ProductTimer propriedade do ClientID controle Timer. No tutorial Nomenclatura de ID de Controle em Páginas de Conteúdo[SKM3], discutimos as diferenças entre o valor do lado ID do servidor e o valor resultante do lado id do cliente e como ClientID retorna o lado iddo cliente.

A Figura 11 mostra esta página quando visitada pela primeira vez por meio de um navegador. O Timer está em execução no momento e atualiza as informações do produto exibidas a cada 15 segundos. A Figura 12 mostra a tela depois que o botão Pausar é clicado. Clicar no botão Pausar interrompe o Temporizador e atualiza o texto do botão para "Retomar". As informações do produto serão atualizadas (e continuarão a ser atualizadas a cada 15 segundos) depois que o usuário clicar em Retomar.

Clique no botão Pausar para interromper o controle de temporizador

Figura 11: Clique no botão Pausar para parar o controle de temporizador (clique para exibir a imagem em tamanho real)

Clique no botão Retomar para reiniciar o temporizador

Figura 12: Clique no botão Retomar para reiniciar o temporizador (clique para exibir a imagem em tamanho real)

Resumo

Ao criar aplicativos Web habilitados para AJAX usando a estrutura ASP.NET AJAX, é imperativo que cada página da Web habilitada para AJAX inclua um controle ScriptManager. Para facilitar esse processo, podemos adicionar um ScriptManager à página master em vez de ter que lembrar de adicionar um ScriptManager a cada página de conteúdo. A etapa 1 mostrou como adicionar o ScriptManager à página master enquanto a Etapa 2 examinava a implementação da funcionalidade AJAX em uma página de conteúdo.

Se você precisar adicionar scripts personalizados, referências a Serviços Web habilitados para script ou serviços de autenticação, autorização ou perfil personalizados a uma página de conteúdo específica, adicione um controle ScriptManagerProxy à página de conteúdo e configure as personalizações lá. A etapa 3 examinou como usar o ScriptManagerProxy para registrar um arquivo JavaScript personalizado em uma página de conteúdo específica.

Programação feliz!

Leitura Adicional

Para obter mais informações sobre os tópicos discutidos neste tutorial, consulte os seguintes recursos:

Sobre o autor

Scott Mitchell, autor de vários livros do ASP/ASP.NET e fundador da 4GuysFromRolla.com, trabalha com tecnologias da Microsoft Web desde 1998. Scott trabalha como consultor independente, treinador e escritor. Seu último livro é Sams Teach Yourself ASP.NET 3.5 em 24 Horas. Scott pode ser contatado em mitchell@4GuysFromRolla.com ou através de seu blog em http://ScottOnWriting.NET.

Agradecimentos Especiais

Esta série de tutoriais foi revisada por muitos revisores úteis. Interessado em revisar meus próximos artigos do MSDN? Nesse caso, deixe-me uma linha em mitchell@4GuysFromRolla.com