ScriptManager.RegisterDataItem Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 pageLoading
eventi , pageLoaded
e 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 pageLoading
eventi , pageLoaded
e 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à .