Blog di LucaB

audio, video, disco

Distinguere un postback sincrono da uno asincrono

Con l'utilizzo di AJAX, magari anche solo attraverso gli UpdatePanel, può capitare di voler distinguere tra un PostBack asincrono ed uno sincrono. Per farlo è sufficiente riferirirsi alla proprietà IsInAsyncPostBack dello ScriptManager.

Ad esempio, supponiamo di avere la seguente pagina Default.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Default.aspx.vb"
Inherits="EsPB._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Prova PostBack</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <p> <asp:Label ID="Label1" runat="server" Text="PostBack:" /> </p> <p> <asp:Button ID="Button1" runat="server" Text="Asincrono" />
</p> </ContentTemplate> </asp:UpdatePanel> <asp:Button ID="Button2" runat="server" Text="Sincrono" /> </div> </form> </body> </html>

Per distinguere tra i due tipi di postback si può scrivere nel file Default.aspx.vb:

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load If Me.IsPostBack Then If ScriptManager1.IsInAsyncPostBack Then Label1.Text &= " Asincrono" Else Label1.Text &= " Sincrono" End If End If End Sub End Class

In questo modo premendo Button1, posto all'interno dell'UpdatePanel, si genera un postback asincrono e quindi si aggiunge la scritta "Asincrono" alla label nella pagina. Invece premendo Button2, che genera un normale postback (viene ricaricata l'intera pagina),  si aggiunge la scritta "Sincrono".

Quando si fa uso di MasterPage, bisogna far riferimento allo ScriptManager della pagina Master. Ad esempio

MasterPage.Master

<%@ Master Language="VB" AutoEventWireup="false" 
CodeBehind="MasterPage.master.vb" Inherits="EsPB.MasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Prova PostBack con MasterPage</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form> </body> </html>

DefaultContent.aspx

<%@ Page Language="vb" AutoEventWireup="false" 
MasterPageFile="~/MasterPage.Master" Codebehind="DefaultContent.aspx.vb"
Inherits="EsPB.DefaultContent" Title="Prova PostBack con MasterPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
runat="server"> <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> </asp:ScriptManagerProxy> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <p> <asp:Label ID="Label1" runat="server" Text="PostBack:" /> </p> <p> <asp:Button ID="Button1" runat="server" Text="Asincrono" />
</p> </ContentTemplate> </asp:UpdatePanel> <asp:Button ID="Button2" runat="server" Text="Sincrono" /> </asp:Content>

DefaultContent.aspx.vb

Public Partial Class DefaultContent
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load If Me.IsPostBack Then Dim sm As ScriptManager = Me.Master.FindControl("ScriptManager1") If sm.IsInAsyncPostBack Then Label1.Text &= " Asincrono" Else Label1.Text &= " Sincrono" End If End If End Sub End Class

Technorati Tags: , , ,

View blog reactions

Posted: Jan 08 2008, 08:24 AM by lucab | with no comments
Filed under: , ,