ScriptManager.RegisterDataItem 方法

定義

在局部網頁呈現期間,將自訂資料傳送給控制項。

多載

RegisterDataItem(Control, String)

在局部網頁呈現期間,將自訂資料傳送給控制項。

RegisterDataItem(Control, String, Boolean)

在局部網頁呈現期間,將自訂資料傳送給控制項,並指出資料是否為「JavaScript 物件標記法」(JSON) 格式。

RegisterDataItem(Control, String)

在局部網頁呈現期間,將自訂資料傳送給控制項。

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)

參數

control
Control

要接收資料的控制項。

dataItem
String

傳送給控制項的資料。

例外狀況

controlnull

已為 dataItem 註冊 control

範例

下列範例示範如何在非同步回傳期間,將資料傳送至頁面上的兩 Label 個控制項。 控制項 Label 不在 控制項內 UpdatePanel

注意

在此範例中傳送的資料僅供說明之用。 在真實世界的應用程式中,您會使用 RegisterDataItem 方法從伺服器傳送自訂資料。

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

備註

RegisterDataItem不論接收資料的控制項是否在控制項內部 UpdatePanel ,都可以使用 方法,在非同步回傳期間將資料從伺服器傳送至用戶端。

RegisterDataItem方法只能在非同步回傳期間呼叫。 若要判斷回傳是否為非同步,請使用 IsInAsyncPostBack 屬性。 這個方法會叫用多載,這個多載會採用名為 isJsonSerialized 的參數,該參數會設定為 falseisJsonSerialized當 參數設定為 false 時,字串不會序列化為 JavaScript 物件標記法, (JSON) 。 如需 JSON 格式的詳細資訊,請參閱 JSON 網站簡介

在 物件的 、 和 事件 PageRequestManager 期間 pageLoading ,可以在用戶端腳本中存取向 RegisterDataItem 方法 endRequest 註冊的資料項目。 pageLoaded 當您處理這些事件時,自訂資料會傳入事件引數物件中。 例如,如果您提供 事件的處理常式 pageLoading ,則會在 類別中 PageLoadingEventArgs 傳遞自訂資料,這會公開 dataItems 屬性。

另請參閱

適用於

RegisterDataItem(Control, String, Boolean)

在局部網頁呈現期間,將自訂資料傳送給控制項,並指出資料是否為「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)

參數

control
Control

要接收資料的網頁控制項。

dataItem
String

傳送給控制項的資料。

isJsonSerialized
Boolean

true 表示 dataItem 已序列化為 JSON,否則為 false

例外狀況

controlnull

已為 dataItem 註冊 control

範例

下列範例示範如何在非同步回傳期間,將資料傳送至頁面上的兩 Label 個控制項。 控制項 Label 不在 控制項內 UpdatePanel 。 此範例顯示不採用 參數的多 isJsonSerialized 載。 否則,擷取 dataItems 物件的 屬性 PageLoadingEventArgs 的程式與未使用該多載的程式相同。

注意

在此範例中傳送的資料僅供說明之用。 在真實世界的應用程式中,您會使用 RegisterDataItem 方法從伺服器傳送自訂資料。 例如,您可以使用資料項目來傳送有關隱藏或顯示不在控制項內 UpdatePanel 之用戶端元素的資訊。

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

備註

不論接收資料的控制項是否在控制項內部 UpdatePanel ,您都可以使用 RegisterDataItem 方法,在非同步回傳期間將資料從伺服器傳送至用戶端。

dataItem如果您註冊 control 的參數未序列化為 JSON,請將 isJsonSerialized 參數設定為 false 。 這可避免針對傳送至用戶端的每個字串使用 eval 函式。 如需 JSON 格式的詳細資訊,請參閱 JSON 網站簡介

RegisterDataItem方法只能在非同步回傳期間呼叫。 若要判斷回傳是否為非同步,請使用 IsInAsyncPostBack 屬性。

使用 RegisterDataItem 方法註冊的資料項目可以在 物件的 、 pageLoadedendRequest 事件 PageRequestManager 期間 pageLoading 于用戶端腳本中存取。 當您處理這些事件時,自訂資料會傳入事件引數物件中。 例如,如果您提供 事件的處理常式 pageLoading ,則會在 類別中 PageLoadingEventArgs 傳遞自訂資料,這會公開 dataItems 屬性。

另請參閱

適用於