ScriptManager.RegisterDataItem Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Odesílá vlastní data ovládacím prvkům při vykreslování částečné stránky.
Přetížení
| RegisterDataItem(Control, String) |
Odesílá vlastní data do ovládacího prvku během vykreslování částečné stránky. |
| RegisterDataItem(Control, String, Boolean) |
Odesílá vlastní data do ovládacího prvku během vykreslování částečných stránek a označuje, jestli jsou data ve formátu JSON (JavaScript Object Notation). |
RegisterDataItem(Control, String)
Odesílá vlastní data do ovládacího prvku během vykreslování částečné stránky.
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)
Parametry
- control
- Control
Ovládací prvek, který přijímá data.
- dataItem
- String
Data odesílaná ovládacímu prvku.
Výjimky
control je null.
Metoda RegisterDataItem(Control, String, Boolean) je volána během postbacku.
dataItem je již zaregistrovaný pro control.
Příklady
Následující příklad ukazuje, jak odeslat data do dvou Label ovládacích prvků na stránce během asynchronního postbacku. Ovládací Label prvky nejsou uvnitř UpdatePanel ovládacího prvku.
Poznámka
Data odeslaná v tomto příkladu jsou pouze pro ilustraci. V reálné aplikaci byste použili metodu RegisterDataItem k odesílání vlastních dat ze serveru.
<%@ 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>
Poznámky
RegisterDataItem Pomocí metody můžete odesílat data ze serveru klientovi během asynchronních zpětných operací bez ohledu na to, zda je ovládací prvek přijímající data uvnitř UpdatePanel ovládacího prvku.
Metodu RegisterDataItem lze volat pouze během asynchronního postbacku. Chcete-li zjistit, zda je postback asynchronní, použijte IsInAsyncPostBack vlastnost . Tato metoda vyvolá přetížení, které přebírá parametr s názvem isJsonSerialized , který je nastavený na false.
isJsonSerialized Pokud je parametr nastavený na false, řetězec není serializován jako JavaScript Object Notation (JSON). Další informace o formátu JSON najdete na webu Představujeme JSON .
K datovým položkám zaregistrovaným pomocí RegisterDataItem metody lze přistupovat v klientském skriptu během pageLoadingudálostí objektu PageRequestManager , pageLoadeda endRequest . Při zpracování těchto událostí jsou vlastní data předána v objektu argumentu události. Pokud například zadáte obslužnou rutinu pageLoading události, vlastní data se předají ve PageLoadingEventArgs třídě, která zveřejňuje dataItems vlastnost.
Viz také
Platí pro
RegisterDataItem(Control, String, Boolean)
Odesílá vlastní data do ovládacího prvku během vykreslování částečných stránek a označuje, jestli jsou data ve formátu 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)
Parametry
- control
- Control
Ovládací prvek stránky, který přijímá data.
- dataItem
- String
Data odesílaná ovládacímu prvku.
- isJsonSerialized
- Boolean
trueoznačující, že dataItem je serializovaný jako JSON, jinak . false
Výjimky
control je null.
Metoda RegisterDataItem(Control, String, Boolean) je volána během postbacku.
dataItem je již zaregistrovaný pro control.
Příklady
Následující příklad ukazuje, jak odeslat data do dvou Label ovládacích prvků na stránce během asynchronního postbacku. Ovládací Label prvky nejsou uvnitř UpdatePanel ovládacího prvku. Tento příklad ukazuje přetížení, které nepřebírají isJsonSerialized parametr. V opačném případě je postup pro načtení dataItems vlastnosti objektu PageLoadingEventArgs stejný, jako kdybyste toto přetížení nepoužili.
Poznámka
Data odeslaná v tomto příkladu jsou pouze pro ilustraci. V reálné aplikaci byste použili metodu RegisterDataItem k odesílání vlastních dat ze serveru. Datovou položku můžete například použít k odeslání informací o tom, zda se mají skrýt nebo zobrazit prvky klienta, které nejsou uvnitř UpdatePanel ovládacího prvku.
<%@ 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>
Poznámky
Použijete metodu RegisterDataItem k odesílání dat ze serveru do klienta během asynchronních zpětných operací bez ohledu na to, zda je ovládací prvek přijímající data uvnitř UpdatePanel ovládacího prvku.
dataItem Pokud parametr, který control zaregistrujete, není serializovaný jako JSON, nastavte isJsonSerialized parametr na false. Tím se vyhnete nutnosti používat eval funkci pro každý řetězec odesílaný klientovi. Další informace o formátu JSON najdete na webu Představujeme JSON .
Metodu RegisterDataItem lze volat pouze během asynchronního postbacku. Chcete-li zjistit, zda je postback asynchronní, použijte IsInAsyncPostBack vlastnost .
K datovým položkám, které jsou registrovány pomocí RegisterDataItem metody, lze přistupovat v klientském skriptu během pageLoadingudálostí objektu PageRequestManager , pageLoadeda endRequest . Při zpracování těchto událostí jsou vlastní data předána v objektu argumentu události. Pokud například zadáte obslužnou rutinu pageLoading události, vlastní data se předají ve PageLoadingEventArgs třídě, která zveřejňuje dataItems vlastnost.