ScriptManager.RegisterDataItem 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在局部页面呈现期间将自定义数据发送到多个控件。
重载
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
。
已为 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
。
例外
control
为 null
。
已为 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
类中传递自定义数据。