0

ScriptManager.RegisterClientScriptBlock을 사용하여 서버 쪽에서 호출하는 Javascript 함수의 반환을 얻으려고합니다.ASP.Net은 UpdatePanel hiddenField에서 Return ScriptManager.RegisterClientScriptBlock을 얻습니다.

현재 내 javascript 함수는 UpdatePanel에 포함 된 HiddenField에 값을 저장합니다. 메서드를 호출하면 ScriptManager.RegisterClientScriptBlock을 실행 한 후 HiddenField 값을 가져 오지만 항상 이전 호출의 값을 반환합니다.

내 사용자 컨트롤 ASPX 사이드 :

<script> 

var num = 0; 

function getReturn() { 

    num = num + 1; 
    var hr= document.getElementById('<%= hdf.ClientID %>'); 
    hRetorno.value = num; 

} 
</script> 

... 

<asp:UpdatePanel ID="up1" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
     <asp:HiddenField ID="hdf" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

내 사용자 컨트롤 서버 측 코드 :

public String GetReturn() 
    { 
     return MyControl.jsGetReturn(this.Page, this.hdf); 
    } 

    private static String jsGetReturn(Page page, HiddenField hid) 
    { 
     ScriptManager.RegisterStartupScript(page, page.GetType(), "key", "getReturn();", true); 

     return hid.Value; 

    } 

색인 페이지 ASPX 사이드 :

 <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     </asp:ScriptManager> 

     <div style="width:720px; height:480px;"> 
      <uc1:MyControl runat="server" id="MyControl1"/> 
     </div> 

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 

       <asp:Button ID="btn" runat="server" OnClick="btn_Click" /> 
       <asp:TextBox ID="txt" runat="server" ></asp:TextBox> 

      </ContentTemplate> 
     </asp:UpdatePanel> 

지수 여기에 코드를 보여 페이지 서버 사이드 코드 :

protected void btn_Click(object sender, EventArgs e) 
    { 
     txt.Text = MyControl1.GetReturn(); 
    } 

답변

1

이러한 작업은 동시에 수행 할 수 없습니다. 자바 스크립트를 사용하여 서버 측에서 숨겨진 코드 필드

  1. 설정치 RegisterClientScriptBlock 또는 RegisterStartupScript 비아.
  2. 동시에 숨겨진 파일 값을 서버 측 코드에서 검색하십시오.

이것은 (변경된) 숨겨진 필드 값이 다시 게시가있을 때만 서버 측 코드에서 사용할 수 있기 때문에 서버 쪽에서 값을 설정할 때 다시 게시 할 필요가 없기 때문에 가능합니다. 항상 이전 값, 즉 페이지에 다시 게시되는 이전 값을 얻습니다.

당신이 RegisterClientScriptBlock 또는 RegisterStartupScript 호출하면, 오히려 그냥 전이나 사용 내용에 따라 <form.. 태그 후 javascript call을 추가하고이 문서로드라고, 즉시 JS 전화를하지 않습니다

편집 그래서 jsGetReturn에있는 경우 RegisterStartupScript을 호출하면 문서로드에서 숨겨진 필드의 값을 설정합니다. - hid.Value은 문서로드를 통해 아직 증가하지 않으므로 값을 업데이트하지 않습니다.

+0

그리고 RegisterClientScriptBlock을 호출 한 후 포스트 백을 수행하는 방법이 있습니까? 아니면 다른 방법이 있을까요? ks스! – Migue

+0

@Migue 자바 스크립트에서 포스트 백을 트리거하는 것처럼 서로 충돌하는 것과 같이 왜 그런 것이 필요한지에 대한 귀하의 요구 사항에 명확하지 않습니다. 단지 'RegisterClientScriptBlock'을 호출 한 후에 그 값을 얻지 못하고 업데이트됩니다 대답, 더 많은 설명을 추가했습니다. –

+0

Google지도 사용자 컨트롤을하고 있어요. 서버 측 메소드 (micontrol.insertMarker())와 같은 비동기 호출을 사용하여 마커를 넣을 수 있습니다. 그러나 control.getCenter() (항상 아약스 사용)와 같은 맵에서 정보를 가져올 수 없습니다. – Migue