Sdílet prostřednictvím


ScriptManager.RegisterDataItem Metoda

Definice

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.

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.

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.

Viz také

Platí pro