Condividi tramite


ScriptManager.RegisterDataItem Metodo

Definizione

Invia dati personalizzati ai controlli durante il rendering parziale della pagina.

Overload

RegisterDataItem(Control, String)

Invia dati personalizzati a un controllo durante il rendering parziale della pagina.

RegisterDataItem(Control, String, Boolean)

Invia dati personalizzati a un controllo durante il rendering parziale della pagina e indica se i dati sono in formato JavaScript Object Notation (JSON).

RegisterDataItem(Control, String)

Invia dati personalizzati a un controllo durante il rendering parziale della pagina.

public:
 void RegisterDataItem(System::Web::UI::Control ^ control, System::String ^ dataItem);
public void RegisterDataItem (System.Web.UI.Control control, string dataItem);
member this.RegisterDataItem : System.Web.UI.Control * string -> unit
Public Sub RegisterDataItem (control As Control, dataItem As String)

Parametri

control
Control

Controllo che riceve i dati.

dataItem
String

Dati inviati al controllo.

Eccezioni

control è null.

Il metodo RegisterDataItem(Control, String, Boolean) viene chiamato nel corso di un postback.

dataItem è già registrato per control.

Esempio

Nell'esempio seguente viene illustrato come inviare dati a due Label controlli in una pagina durante un postback asincrono. I Label controlli non si trovano all'interno di un UpdatePanel controllo .

Nota

I dati inviati in questo esempio sono solo per l'illustrazione. In un'applicazione reale si userà il RegisterDataItem metodo per inviare dati personalizzati dal server.

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        if (ScriptManager1.IsInAsyncPostBack)
        {
            System.Web.Script.Serialization.JavaScriptSerializer json =
                new System.Web.Script.Serialization.JavaScriptSerializer();
            ScriptManager1.RegisterDataItem(Label1, DateTime.Now.ToString());
            ScriptManager1.RegisterDataItem(Label2, json.Serialize("more data"), true);
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ScriptManager RegisterDataItem Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <script type="text/javascript" language="javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler);
        function PageLoadingHandler(sender, args) {
            var dataItems = args.get_dataItems();
            if ($get('Label1') !== null)
                $get('Label1').innerHTML = dataItems['Label1'];
            if ($get('Label2') !== null)
                $get('Label2').innerHTML = dataItems['Label2'];
        }
    </script>
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
       UpdatePanel content.
       <asp:Button ID="Button1" Text="Submit" runat="server" />
    </ContentTemplate>
    </asp:UpdatePanel>
    <hr />
    <asp:Label ID="Label1" runat="server" /> <br />
    <asp:Label ID="Label2" runat="server" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        If (ScriptManager1.IsInAsyncPostBack) Then
            Dim json As New System.Web.Script.Serialization.JavaScriptSerializer
            ScriptManager1.RegisterDataItem(Label1, DateTime.Now.ToString())
            ScriptManager1.RegisterDataItem(Label2, json.Serialize("more data"), True)
        End If
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ScriptManager RegisterDataItem Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <script type="text/javascript" language="javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler);
        function PageLoadingHandler(sender, args) {
            var dataItems = args.get_dataItems();
            if ($get('Label1') !== null)
                $get('Label1').innerHTML = dataItems['Label1'];
            if ($get('Label2') !== null)
                $get('Label2').innerHTML = dataItems['Label2'];
        }
    </script>
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
       UpdatePanel content.
       <asp:Button ID="Button1" Text="Submit" runat="server" />
    </ContentTemplate>
    </asp:UpdatePanel>
    <hr />
    <asp:Label ID="Label1" runat="server" /> <br />
    <asp:Label ID="Label2" runat="server" />
    </div>
    </form>
</body>
</html>

Commenti

Utilizzare il RegisterDataItem metodo per inviare dati dal server al client durante i postback asincroni, indipendentemente dal fatto che il controllo che riceve i dati si trova all'interno di un UpdatePanel controllo .

Il RegisterDataItem metodo può essere chiamato solo durante un postback asincrono. Per determinare se un postback è asincrono, utilizzare la IsInAsyncPostBack proprietà . Questo metodo richiama l'overload che accetta un parametro denominato isJsonSerialized impostato su false. Quando il isJsonSerialized parametro è impostato su false, la stringa non viene serializzata come JSON (JavaScript Object Notation). Per altre informazioni sul formato JSON, vedere il sito Web Introducing JSON (Introduzione al sito Web JSON).

È possibile accedere agli elementi di dati registrati con il RegisterDataItem metodo nello script client durante gli pageLoadingeventi , pageLoadede endRequest dell'oggetto PageRequestManager . Quando si gestiscono questi eventi, i dati personalizzati vengono passati in un oggetto argomento evento. Ad esempio, se si fornisce un gestore per l'evento pageLoading , i dati personalizzati vengono passati nella PageLoadingEventArgs classe , che espone una dataItems proprietà .

Vedi anche

Si applica a

RegisterDataItem(Control, String, Boolean)

Invia dati personalizzati a un controllo durante il rendering parziale della pagina e indica se i dati sono in formato JavaScript Object Notation (JSON).

public:
 void RegisterDataItem(System::Web::UI::Control ^ control, System::String ^ dataItem, bool isJsonSerialized);
public void RegisterDataItem (System.Web.UI.Control control, string dataItem, bool isJsonSerialized);
member this.RegisterDataItem : System.Web.UI.Control * string * bool -> unit
Public Sub RegisterDataItem (control As Control, dataItem As String, isJsonSerialized As Boolean)

Parametri

control
Control

Controllo pagina che riceve i dati.

dataItem
String

Dati inviati al controllo.

isJsonSerialized
Boolean

true per indicare che dataItem è serializzato come JSON; in caso contrario, false.

Eccezioni

control è null.

Il metodo RegisterDataItem(Control, String, Boolean) viene chiamato nel corso di un postback.

dataItem è già registrato per control.

Esempio

Nell'esempio seguente viene illustrato come inviare dati a due Label controlli in una pagina durante un postback asincrono. I Label controlli non si trovano all'interno di un UpdatePanel controllo . In questo esempio viene illustrato l'overload che non accetta il isJsonSerialized parametro . In caso contrario, la routine per il recupero della dataItems proprietà dell'oggetto PageLoadingEventArgs è uguale a quella di se non è stato utilizzato tale overload.

Nota

I dati inviati in questo esempio sono solo per l'illustrazione. In un'applicazione reale si userà il RegisterDataItem metodo per inviare dati personalizzati dal server. Ad esempio, è possibile usare l'elemento di dati per inviare informazioni su se nascondere o visualizzare gli elementi client che non si trovano all'interno di un UpdatePanel controllo.

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        if (ScriptManager1.IsInAsyncPostBack)
        {
            System.Web.Script.Serialization.JavaScriptSerializer json =
                new System.Web.Script.Serialization.JavaScriptSerializer();
            ScriptManager1.RegisterDataItem(Label1, DateTime.Now.ToString());
            ScriptManager1.RegisterDataItem(Label2, json.Serialize("more data"), true);
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ScriptManager RegisterDataItem Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <script type="text/javascript" language="javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler);
        function PageLoadingHandler(sender, args) {
            var dataItems = args.get_dataItems();
            if ($get('Label1') !== null)
                $get('Label1').innerHTML = dataItems['Label1'];
            if ($get('Label2') !== null)
                $get('Label2').innerHTML = dataItems['Label2'];
        }
    </script>
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
       UpdatePanel content.
       <asp:Button ID="Button1" Text="Submit" runat="server" />
    </ContentTemplate>
    </asp:UpdatePanel>
    <hr />
    <asp:Label ID="Label1" runat="server" /> <br />
    <asp:Label ID="Label2" runat="server" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        If (ScriptManager1.IsInAsyncPostBack) Then
            Dim json As New System.Web.Script.Serialization.JavaScriptSerializer
            ScriptManager1.RegisterDataItem(Label1, DateTime.Now.ToString())
            ScriptManager1.RegisterDataItem(Label2, json.Serialize("more data"), True)
        End If
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ScriptManager RegisterDataItem Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <script type="text/javascript" language="javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler);
        function PageLoadingHandler(sender, args) {
            var dataItems = args.get_dataItems();
            if ($get('Label1') !== null)
                $get('Label1').innerHTML = dataItems['Label1'];
            if ($get('Label2') !== null)
                $get('Label2').innerHTML = dataItems['Label2'];
        }
    </script>
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
       UpdatePanel content.
       <asp:Button ID="Button1" Text="Submit" runat="server" />
    </ContentTemplate>
    </asp:UpdatePanel>
    <hr />
    <asp:Label ID="Label1" runat="server" /> <br />
    <asp:Label ID="Label2" runat="server" />
    </div>
    </form>
</body>
</html>

Commenti

Utilizzare il RegisterDataItem metodo per inviare dati dal server al client durante i postback asincroni, indipendentemente dal fatto che il controllo che riceve i dati si trovi all'interno di un UpdatePanel controllo .

Se il parametro per control cui si esegue la dataItem registrazione non viene serializzato come JSON, impostare il isJsonSerialized parametro su false. In questo modo si evita la necessità di usare la eval funzione per ogni stringa inviata al client. Per altre informazioni sul formato JSON, vedere il sito Web Introducing JSON (Introduzione al sito Web JSON).

Il RegisterDataItem metodo può essere chiamato solo durante un postback asincrono. Per determinare se un postback è asincrono, utilizzare la IsInAsyncPostBack proprietà .

È possibile accedere agli elementi di dati registrati tramite il RegisterDataItem metodo nello script client durante gli pageLoadingeventi , pageLoadede endRequest dell'oggetto PageRequestManager . Quando si gestiscono questi eventi, i dati personalizzati vengono passati in un oggetto argomento evento. Ad esempio, se si fornisce un gestore per l'evento pageLoading , i dati personalizzati vengono passati nella PageLoadingEventArgs classe , che espone una dataItems proprietà .

Vedi anche

Si applica a