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

已为 control 注册 dataItem

示例

以下示例演示如何在异步回发期间将数据发送到页面上的两 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 该属性。 This method invokes the overload that takes a parameter named isJsonSerialized that is set to false. 如果参数 isJsonSerialized 设置为 false,则字符串不会序列化为 JavaScript 对象表示法 (JSON) 。 有关 JSON 格式的详细信息,请参阅 JSON 网站简介

在对象和事件PageRequestManager期间pageLoading``pageLoaded``endRequest,可以在客户端脚本中访问向RegisterDataItem该方法注册的数据项。 处理这些事件时,自定义数据将传递到事件参数对象中。 例如,如果为事件提供处理程序pageLoading,则会在公开dataItems属性的PageLoadingEventArgs类中传递自定义数据。

另请参阅

适用于

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

如果要将 dataItem 序列化为 JSON,则为 true;否则为 false

例外

controlnull

已为 control 注册 dataItem

示例

以下示例演示如何在异步回发期间将数据发送到页面上的两 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 该属性。

在对象期间,可以在客户端脚本pageLoading``pageLoaded中访问使用RegisterDataItem该方法注册的数据项和endRequest事件PageRequestManager。 处理这些事件时,自定义数据将传递到事件参数对象中。 例如,如果为事件提供处理程序pageLoading,则会在公开dataItems属性的PageLoadingEventArgs类中传递自定义数据。

另请参阅

适用于