다음을 통해 공유


ScriptManager.RegisterDataItem 메서드

정의

부분 페이지 렌더링 도중 사용자 지정 데이터를 컨트롤로 보냅니다.

오버로드

RegisterDataItem(Control, String)

부분 페이지 렌더링 도중 사용자 지정 데이터를 컨트롤로 보냅니다.

RegisterDataItem(Control, String, Boolean)

부분 페이지 렌더링 도중 사용자 지정 데이터를 컨트롤로 보내고, 데이터가 JSON(JavaScript Object Notation) 형식인지 여부를 나타냅니다.

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에 등록된 경우

예제

다음 예제에서는 비동기 포스트백 중에 페이지의 두 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하면 문자열이 JSON(JavaScript Object Notation)으로 직렬화되지 않습니다. JSON 형식에 대한 자세한 내용은 소개 JSON 웹 사이트를 참조하세요.

메서드에 RegisterDataItem 등록된 데이터 항목은 개체의 PageRequestManager 이벤트 및 endRequest 동안 pageLoading``pageLoaded클라이언트 스크립트에서 액세스할 수 있습니다. 이러한 이벤트를 처리하면 사용자 지정 데이터가 이벤트 인수 개체에 전달됩니다. 예를 들어 이벤트에 대한 pageLoading 처리기를 제공하는 경우 사용자 지정 데이터는 속성을 노출하는 클래스에 PageLoadingEventArgs 전달됩니다 dataItems .

추가 정보

적용 대상

RegisterDataItem(Control, String, Boolean)

부분 페이지 렌더링 도중 사용자 지정 데이터를 컨트롤로 보내고, 데이터가 JSON(JavaScript Object Notation) 형식인지 여부를 나타냅니다.

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으로 serialize됨을 나타내면 true이고, 그렇지 않으면 false입니다.

예외

control이(가) null인 경우

RegisterDataItem(Control, String, Boolean) 메서드가 포스트백 도중에 호출되는 경우

dataItem이 이미 control에 등록된 경우

예제

다음 예제에서는 비동기 포스트백 중에 페이지의 두 Label 컨트롤에 데이터를 보내는 방법을 보여 줍니다. 컨트롤이 Label 컨트롤 내에 UpdatePanel 있지 않습니다. 이 예제에서는 매개 변수를 사용하지 않는 오버로드를 isJsonSerialized 보여줍니다. 그렇지 않으면 개체의 PageLoadingEventArgs 속성을 검색하는 dataItems 절차는 해당 오버로드를 사용하지 않은 경우와 동일합니다.

참고

이 예제에서 전송되는 데이터는 그림 전용입니다. 실제 애플리케이션을 사용 하 여는 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 매개 변수가 JSON으로 직렬화되지 않은 경우 매개 변수falseisJsonSerialized .로 control 설정합니다. 이렇게 하면 클라이언트로 전송되는 각 문자열에 함수를 사용할 eval 필요가 없습니다. JSON 형식에 대한 자세한 내용은 소개 JSON 웹 사이트를 참조하세요.

메서드는 RegisterDataItem 비동기 포스트백 중에만 호출할 수 있습니다. 포스트백이 비동기인지 여부를 확인하려면 속성을 사용합니다 IsInAsyncPostBack .

메서드를 사용하여 RegisterDataItem 등록된 데이터 항목은 개체의 PageRequestManager 이벤트 및 endRequest 동안 pageLoading``pageLoaded클라이언트 스크립트에서 액세스할 수 있습니다. 이러한 이벤트를 처리하면 사용자 지정 데이터가 이벤트 인수 개체에 전달됩니다. 예를 들어 이벤트에 대한 pageLoading 처리기를 제공하는 경우 사용자 지정 데이터는 속성을 노출하는 클래스에 PageLoadingEventArgs 전달됩니다 dataItems .

추가 정보

적용 대상