Compartilhar via


ScriptManager.RegisterDataItem Método

Definição

Envia dados personalizados para controles durante a renderização de página parcial.

Sobrecargas

Nome Description
RegisterDataItem(Control, String)

Envia dados personalizados para um controle durante a renderização de página parcial.

RegisterDataItem(Control, String, Boolean)

Envia dados personalizados para um controle durante a renderização de página parcial e indica se os dados estão no formato JSON (JavaScript Object Notation).

RegisterDataItem(Control, String)

Envia dados personalizados para um controle durante a renderização de página parcial.

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)

Parâmetros

control
Control

O controle que está recebendo os dados.

dataItem
String

Os dados enviados para o controle.

Exceções

control é null.

O RegisterDataItem(Control, String, Boolean) método é chamado durante um postback.

dataItem já está registrado para control.

Exemplos

O exemplo a seguir mostra como enviar dados para dois Label controles em uma página durante um postback assíncrono. Os Label controles não estão dentro de um UpdatePanel controle.

Observação

Os dados enviados neste exemplo são apenas para ilustração. Em um aplicativo do mundo real, você usaria o RegisterDataItem método para enviar dados personalizados do servidor.

<%@ 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>

Comentários

Use o RegisterDataItem método para enviar dados do servidor para o cliente durante postbacks assíncronos, independentemente de o controle que recebe os dados estiver dentro de um UpdatePanel controle.

O RegisterDataItem método só pode ser chamado durante um postback assíncrono. Para determinar se um postback é assíncrono, use a IsInAsyncPostBack propriedade. Esse método invoca a sobrecarga que usa um parâmetro chamado isJsonSerialized que é definido como false. Quando o isJsonSerialized parâmetro é definido como false, a cadeia de caracteres não é serializada como JSON (JavaScript Object Notation). Para obter mais informações sobre o formato JSON, consulte o site de introdução do JSON .

Os itens de dados registrados com o RegisterDataItem método podem ser acessados no script do cliente durante o pageLoading, pageLoadede endRequest eventos do PageRequestManager objeto. Quando você lida com esses eventos, os dados personalizados são passados em um objeto de argumento de evento. Por exemplo, se você fornecer um manipulador para o pageLoading evento, os dados personalizados serão passados na classe, o PageLoadingEventArgs que expõe uma dataItems propriedade.

Confira também

Aplica-se a

RegisterDataItem(Control, String, Boolean)

Envia dados personalizados para um controle durante a renderização de página parcial e indica se os dados estão no formato JSON (JavaScript Object Notation).

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)

Parâmetros

control
Control

O controle de página que está recebendo os dados.

dataItem
String

Os dados enviados para o controle.

isJsonSerialized
Boolean

true para indicar que dataItem é serializado como JSON; caso contrário, false.

Exceções

control é null.

O RegisterDataItem(Control, String, Boolean) método é chamado durante um postback.

dataItem já está registrado para control.

Exemplos

O exemplo a seguir mostra como enviar dados para dois Label controles em uma página durante um postback assíncrono. Os Label controles não estão dentro de um UpdatePanel controle. Este exemplo mostra a sobrecarga que não assume o isJsonSerialized parâmetro. Caso contrário, o procedimento para recuperar a dataItems propriedade do PageLoadingEventArgs objeto é o mesmo que se você não tivesse usado essa sobrecarga.

Observação

Os dados enviados neste exemplo são apenas para ilustração. Em um aplicativo do mundo real, você usaria o RegisterDataItem método para enviar dados personalizados do servidor. Por exemplo, você pode usar o item de dados para enviar informações sobre como ocultar ou mostrar elementos do cliente que não estão dentro de um UpdatePanel controle.

<%@ 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>

Comentários

Use o RegisterDataItem método para enviar dados do servidor para o cliente durante postbacks assíncronos, independentemente de o controle que recebe os dados estiver dentro de um UpdatePanel controle.

Se o parâmetro para o dataItem qual você se registra não for serializado como JSON, defina o isJsonSerialized parâmetro como false.control Isso evita a necessidade de usar a eval função para cada cadeia de caracteres que é enviada ao cliente. Para obter mais informações sobre o formato JSON, consulte o site de introdução do JSON .

O RegisterDataItem método só pode ser chamado durante um postback assíncrono. Para determinar se um postback é assíncrono, use a IsInAsyncPostBack propriedade.

Os itens de dados registrados usando o RegisterDataItem método podem ser acessados no script do cliente durante o pageLoadingpageLoaded, e endRequest eventos do PageRequestManager objeto. Quando você lida com esses eventos, os dados personalizados são passados em um objeto de argumento de evento. Por exemplo, se você fornecer um manipulador para o pageLoading evento, os dados personalizados serão passados na classe, o PageLoadingEventArgs que expõe uma dataItems propriedade.

Confira também

Aplica-se a