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
。
已為 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
。
isJsonSerialized
當 參數設定為 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
。
例外狀況
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>
備註
不論接收資料的控制項是否在控制項內部 UpdatePanel ,您都可以使用 RegisterDataItem 方法,在非同步回傳期間將資料從伺服器傳送至用戶端。
dataItem
如果您註冊 control
的參數未序列化為 JSON,請將 isJsonSerialized
參數設定為 false
。 這可避免針對傳送至用戶端的每個字串使用 eval
函式。 如需 JSON 格式的詳細資訊,請參閱 JSON 網站簡介 。
RegisterDataItem方法只能在非同步回傳期間呼叫。 若要判斷回傳是否為非同步,請使用 IsInAsyncPostBack 屬性。
使用 RegisterDataItem 方法註冊的資料項目可以在 物件的 、 pageLoaded
和 endRequest
事件 PageRequestManager
期間 pageLoading
于用戶端腳本中存取。 當您處理這些事件時,自訂資料會傳入事件引數物件中。 例如,如果您提供 事件的處理常式 pageLoading
,則會在 類別中 PageLoadingEventArgs
傳遞自訂資料,這會公開 dataItems
屬性。