语言

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

发送到控件的数据。

例外

control 是 null。

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 设置为 false,则字符串不会序列化为 JavaScript 对象表示法(JSON)。 有关 JSON 格式的详细信息,请参阅 JSON 网站简介 。

在对象和事件RegisterDataItem期间pageLoadingpageLoadedendRequest,可以在客户端脚本中访问向PageRequestManager该方法注册的数据项。 处理这些事件时,自定义数据在事件参数对象中传递。 例如,如果为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。

例外

control 是 null。

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>

注解

无论接收数据的控件是否在控件内部RegisterDataItem,都可以使用UpdatePanel该方法在异步回发期间将数据从服务器发送到客户端。

dataItem如果注册的参数control未序列化为 JSON,请将isJsonSerialized参数设置为 false。 这样就无需对发送到客户端的每个字符串使用 eval 函数。 有关 JSON 格式的详细信息,请参阅 JSON 网站简介 。

RegisterDataItem只能在异步回发期间调用该方法。 若要确定回发是否为异步,请使用该 IsInAsyncPostBack 属性。

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

另请参阅

适用于