ScriptManager.RegisterDataItem Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 false
en , 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 pageLoading
eventos , pageLoaded
y 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 false
en . 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 pageLoading
eventos , pageLoaded
y 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 .