Compartir a través de


ScriptManager.RegisterDataItem Método

Definición

Envía datos personalizados a los controles durante la representación parcial de la página.

Sobrecargas

RegisterDataItem(Control, String)

Envía datos personalizados a un control durante la representación parcial de la página.

RegisterDataItem(Control, String, Boolean)

Envía datos personalizados a un control durante la representación parcial de la página e indica si los datos están en formato de notación de objetos JavaScript (JSON).

RegisterDataItem(Control, String)

Envía datos personalizados a un control durante la representación parcial de la página.

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

Control que recibe los datos.

dataItem
String

Datos que se envían al control.

Excepciones

control es null.

Durante un postback, se llama al método RegisterDataItem(Control, String, Boolean).

dataItem ya se encuentra registrado para control.

Ejemplos

En el ejemplo siguiente se muestra cómo enviar datos a dos Label controles de una página durante una postback asincrónica. Los Label controles no están dentro de un UpdatePanel control .

Nota

Los datos que se envían en este ejemplo son solo para ilustración. En una aplicación real, usaría el RegisterDataItem método para enviar datos personalizados desde el 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>

Comentarios

Use el RegisterDataItem método para enviar datos desde el servidor al cliente durante postbacks asincrónicos, independientemente de si el control que recibe los datos está dentro de un UpdatePanel control.

Solo RegisterDataItem se puede llamar al método durante una postback asincrónica. Para determinar si un postback es asincrónico, use la IsInAsyncPostBack propiedad . Este método invoca la sobrecarga que toma un parámetro denominado isJsonSerialized que se establece en false. Cuando el isJsonSerialized parámetro se establece falseen , la cadena no se serializa como notación de objetos JavaScript (JSON). Para obtener más información sobre el formato JSON, consulte el sitio web Introducing JSON (Introducción al sitio web JSON).

Se puede acceder a los elementos de datos registrados con el RegisterDataItem método en el script de cliente durante los pageLoadingeventos , pageLoadedy endRequest del PageRequestManager objeto . Al controlar estos eventos, los datos personalizados se pasan en un objeto de argumento de evento. Por ejemplo, si proporciona un controlador para el pageLoading evento, los datos personalizados se pasan en la PageLoadingEventArgs clase , que expone una dataItems propiedad .

Consulte también

Se aplica a

RegisterDataItem(Control, String, Boolean)

Envía datos personalizados a un control durante la representación parcial de la página e indica si los datos están en formato de notación de objetos JavaScript (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)

Parámetros

control
Control

Control de página que recibe los datos.

dataItem
String

Datos que se envían al control.

isJsonSerialized
Boolean

Es true para indicar que dataItem se serializa como JSON; en caso contrario, es false.

Excepciones

control es null.

Durante un postback, se llama al método RegisterDataItem(Control, String, Boolean).

dataItem ya se encuentra registrado para control.

Ejemplos

En el ejemplo siguiente se muestra cómo enviar datos a dos Label controles de una página durante una postback asincrónica. Los Label controles no están dentro de un UpdatePanel control . En este ejemplo se muestra la sobrecarga que no toma el isJsonSerialized parámetro . De lo contrario, el procedimiento para recuperar la dataItems propiedad del PageLoadingEventArgs objeto es el mismo que si no utilizaba esa sobrecarga.

Nota

Los datos que se envían en este ejemplo son solo para ilustración. En una aplicación real, usaría el RegisterDataItem método para enviar datos personalizados desde el servidor. Por ejemplo, puede usar el elemento de datos para enviar información sobre si se deben ocultar o mostrar elementos de cliente que no están dentro de un UpdatePanel control.

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

Comentarios

Use el RegisterDataItem método para enviar datos desde el servidor al cliente durante las postbacks asincrónicas, independientemente de si el control que recibe los datos está dentro de un UpdatePanel control.

Si el parámetro para el dataItem que se registra control no se serializa como JSON, establezca el isJsonSerialized parámetro falseen . Esto evita la necesidad de usar la eval función para cada cadena que se envía al cliente. Para obtener más información sobre el formato JSON, consulte el sitio web Introducing JSON (Introducción al sitio web JSON).

Solo RegisterDataItem se puede llamar al método durante una postback asincrónica. Para determinar si un postback es asincrónico, use la IsInAsyncPostBack propiedad .

Se puede tener acceso a los elementos de datos registrados mediante el método en el RegisterDataItem script de cliente durante los pageLoadingeventos , pageLoadedy endRequest del PageRequestManager objeto . Al controlar estos eventos, los datos personalizados se pasan en un objeto de argumento de evento. Por ejemplo, si proporciona un controlador para el pageLoading evento, los datos personalizados se pasan en la PageLoadingEventArgs clase , que expone una dataItems propiedad .

Consulte también

Se aplica a