Language

ScriptManager.RegisterDataItem メソッド

定義

部分ページレンダリング中にカスタム データをコントロールに送信します。

オーバーロード

名前 説明
RegisterDataItem(Control, String)

部分ページレンダリング中にカスタム データをコントロールに送信します。

RegisterDataItem(Control, String, Boolean)

部分ページレンダリング中にカスタム データをコントロールに送信し、データが JavaScript Object Notation (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

コントロールに送信されるデータ。

例外

control は nullです。

RegisterDataItem(Control, String, Boolean) メソッドはポストバック中に呼び出されます。

dataItem は既に controlに登録されています。

例

次の例は、非同期ポストバック中にページ上の 2 つの Label コントロールにデータを送信する方法を示しています。 Label コントロールは、UpdatePanel コントロール内にありません。

Note

この例で送信されるデータは、説明のみを目的としています。 実際のアプリケーションでは、 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に設定されている false という名前のパラメーターを受け取るオーバーロードを呼び出します。 isJsonSerialized パラメーターが false に設定されている場合、文字列は JavaScript Object Notation (JSON) としてシリアル化されません。 JSON 形式の詳細については、JSON Web サイト の概要を 参照してください。

RegisterDataItem メソッドに登録されているデータ項目は、pageLoading オブジェクトのpageLoaded、endRequest、およびPageRequestManagerイベント中にクライアント スクリプトでアクセスできます。 これらのイベントを処理すると、カスタム データがイベント引数オブジェクトに渡されます。 たとえば、 pageLoading イベントのハンドラーを指定した場合、カスタム データは PageLoadingEventArgs クラスで渡され、 dataItems プロパティが公開されます。

こちらもご覧ください

適用対象

RegisterDataItem(Control, String, Boolean)

部分ページレンダリング中にカスタム データをコントロールに送信し、データが 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)

パラメーター

control
Control

データを受信するページ コントロール。

dataItem
String

コントロールに送信されるデータ。

isJsonSerialized
Boolean

true dataItemが JSON としてシリアル化されることを示す場合は。それ以外の場合はfalse。

例外

control は nullです。

RegisterDataItem(Control, String, Boolean) メソッドはポストバック中に呼び出されます。

dataItem は既に controlに登録されています。

例

次の例は、非同期ポストバック中にページ上の 2 つの Label コントロールにデータを送信する方法を示しています。 Label コントロールは、UpdatePanel コントロール内にありません。 この例では、 isJsonSerialized パラメーターを受け取らないオーバーロードを示します。 それ以外の場合、dataItems オブジェクトのPageLoadingEventArgs プロパティを取得するプロシージャは、そのオーバーロードを使用しなかった場合と同じです。

Note

この例で送信されるデータは、説明のみを目的としています。 実際のアプリケーションでは、 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>

注釈

RegisterDataItem メソッドを使用すると、データを受信するコントロールがUpdatePanel コントロール内にあるかどうかにかかわらず、非同期ポストバック中にサーバーからクライアントにデータを送信できます。

dataItemに登録するcontrol パラメーターが JSON としてシリアル化されない場合は、isJsonSerialized パラメーターを false に設定します。 これにより、クライアントに送信される文字列ごとに eval 関数を使用する必要がなくなります。 JSON 形式の詳細については、JSON Web サイト の概要を 参照してください。

RegisterDataItem メソッドは、非同期ポストバック中にのみ呼び出すことができます。 ポストバックが非同期かどうかを判断するには、 IsInAsyncPostBack プロパティを使用します。

RegisterDataItem メソッドを使用して登録されたデータ項目は、pageLoading オブジェクトのpageLoaded、endRequest、およびPageRequestManagerイベント中にクライアント スクリプトでアクセスできます。 これらのイベントを処理すると、カスタム データがイベント引数オブジェクトに渡されます。 たとえば、 pageLoading イベントのハンドラーを指定した場合、カスタム データは PageLoadingEventArgs クラスで渡され、 dataItems プロパティが公開されます。

こちらもご覧ください

適用対象