2014-12-24 9 views
0

PreRender에서 값이 할당 된 서버 측 변수가 있습니다. 간단하게하기 위해 들어, 내가이 일을하고있어 가정 해 봅시다 : 내 마크 업에서ASP.NET UpdatePanel - 인라인 변수

protected string test; 
    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     test = Guid.NewGuid().ToString(); 
    } 

변수는 다음과 같이, UpdatePanel 내에서라고합니다 :

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Button ID="Button1" runat="server" Text="Perform postback" /> 
      <script type="text/javascript"> 
       Sys.Application.add_load(function() { 
        alert('<%=test%>'); 
       }); 
      </script> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

을의 첫 번째로드에 페이지에서 자바 스크립트 경고 기능을 사용하면 예상대로 임의의 값을 얻을 수 있습니다. 그러나 이후의 모든 포스트 백에서 Guid의 원래 값은 그대로 유지됩니다.

아무도 이것이 왜 그렇게 설명하고 해결책을 제시 할 수 있습니까? 예를 들어, 숨겨진 필드에 'test'값을 넣어 필요한 동작을 얻을 수 있다고 확신하지만 이상적으로는 그 깊이로 가라 앉지 않아도됩니다. 불행히도 UpdatePanel을 좀 더 가벼운 것으로 대체하는 것은 실제로 옵션이 아닙니다.

답변

1

나는 이것에 대한 해결책을 찾았고, 내가 두려워했던만큼 더러운 것도 아니다. 나는 함수의 외부 JS 변수를 선언 :

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Button ID="Button1" runat="server" Text="Perform postback" /> 
      <script type="text/javascript"> 
       var test; 

       Sys.Application.add_load(function() { 
        alert(test); 
       }); 
      </script> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

내에서 코드 숨김, 난 그렇게처럼 JS 변수에게 Sys.Application.add_init 방법에 값을 할당합니다

protected void Page_PreRender(object sender, EventArgs e) 
    { 
     ScriptManager.RegisterStartupScript(this, typeof(UpdatePanelTest), "startupScripts", "Sys.Application.add_init(function() {test='" + Guid.NewGuid().ToString() + "';});", true); 
    } 

자보세요 첫 번째로드 및 모든 다시 게시에서 다른 Guid가 표시됩니다.