재우니의 블로그


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Pass Javascript Variables to Server</title>
     <script type="text/javascript">
         function SetHiddenVariable()
         {
            var jsVar = "dotnetcurry.com";
            __doPostBack('callPostBack', jsVar);
         }
    </script>
</head>
 
<body>
    <form id="form1" runat="server">
    <div>   
        <asp:TextBox ID="txtJSValue" runat="server"></asp:TextBox>
        <asp:Button ID="btnJSValue" Text="Click to retreive Javascript Variable"
            runat="server"/>
    </div>
    </form>
</body>
</html>
 


위에 __doPostBack('callPostBack', jsVar); 이 부분을 자세히 보길 바란다.
해당 값을 어떻게 처리하는지 아래와 같다.GetPostBackEventReference 은 서버에 다시 게시 작업을 발생시키는 클라이언트 이벤트에 사용할 수 있는 문자열을 반환합니다. 참조 문자열은 다시 게시 작업과 추가 이벤트 정보의 문자열 인수를 처리하는 지정된 컨트롤에 의해 정의됩니다.
__doPostBack 에 할당된 두개의 파라미터가 존재하는데... 첫번째가
eventTarget 변수를 의미하며, eventArgument 은 두번째 변수를 의미합니다.


protected void Page_Load(object sender, EventArgs e)
{
    this.ClientScript.GetPostBackEventReference(this, "arg");
    if (IsPostBack)
    {
        string eventTarget = this.Request["__EVENTTARGET"];
        string eventArgument = this.Request["__EVENTARGUMENT"];
 
        if (eventTarget != String.Empty && eventTarget == "callPostBack")
        {
            if (eventArgument != String.Empty)
                txtJSValue.Text = eventArgument;
        }
    }
    else
    {
        btnJSValue.Attributes.Add("onClick", "SetHiddenVariable();");
    }
}


또는, 동적으로 서버컨트롤을 코드 비하인드 단에서 구현을 할때, 이벤트 onclick 에 대한 부분을 GetPostBackEventReference  통해서 지정을 하여, postback 이 발생할 경우 이에 대한 이벤트 처리할 메소드를 지정하여 구현할 수 있다. 자세한 예제는 아래의 msdn 을 참고하시기 바란다.