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
View blog reactions