2012-09-30 1 views
1

코드에서 숨겨진 값에 액세스하려고하지만 대신 비어있는 값이 있습니다. 여기서 내가하는 일은 Javascript 함수에서 2 개의 hiddenfield 값을 설정하는 것입니다. 그리고 나서 asp : button 클릭을 통한 포스트 백을 수행한다. 내가 뭘 잘못하고 있는지 잘 모르겠다. 친절히 도와주세요.asp.net + CodeBehind에서 포스트 백에서 JS에 할당 된 HiddenField 값에 액세스

감사합니다.

<form id="Form1" class="form" runat="server"> 

      <p class="SearchAddress"> 
       <asp:TextBox ID="searchTextField" runat="server" /> 
       <label for="searchTextField"> 
        Location</label> 
      </p> 
      <p class="Date"> 
       <asp:TextBox ID="txtDate" runat="server">18/10/2012</asp:TextBox> 
       <label for="txtDate"> 
        Date</label> 
      </p> 
      <p class="TimeFrom"> 
       <asp:TextBox ID="TimeFrom" runat="server">18:00</asp:TextBox> 
       <label for="txtTimeFrom"> 
        Time From</label> 
      </p> 
      <p class="TimeTo"> 
       <asp:TextBox ID="TimeTo" runat="server">19:00</asp:TextBox> 
       <label for="txtTimeTo"> 
        Time To</label> 
      </p> 

      <p class="submit"> 
       <asp:Button ID="btnCalculateCoordinates" runat="server" Text="Post It!" 
        onClientclick="calculateCoordinates();" onclick="btnCalculateCoordinates_Click" 
      /> 
      </p> 

      <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
      <asp:UpdatePanel ID="uppnlLatLong" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 
         <asp:HiddenField ID="txtLatitude" runat="server" /> 
         <asp:HiddenField ID="txtLongitude" runat="server" /> 
      </ContentTemplate> 
      </asp:UpdatePanel> 
      </form> 

     function calculateCoordinates() { 
        var txtAddress1 = document.getElementById('<%=searchTextField.ClientID%>'); 
        var txtLat = document.getElementById('<%=txtLatitude.ClientID%>'); 
        var txtLng = document.getElementById('<%=txtLongitude.ClientID%>'); 

        var address = txtAddress1.value + ', '; 

        var geocoder; 
        geocoder = new google.maps.Geocoder(); 

        geocoder.geocode({ address: address }, function (results, status) { 
         if (status == google.maps.GeocoderStatus.OK) { 
          var location = results[0].geometry.location; 
          txtLat.value = location.lat(); //SETTING THE HIDDENFIELD VALUE 
          txtLng.value = location.lng(); //SETTING THE HIDDENFIELD VALUE 
         } 
         else 
          alert('Opps, sorry but we are unable to locate' + $(txtAddress1).val()); 
        }); 
      } 
     </script> 

답변

1

업데이트 된 이벤트는 생성 된 명령을 숨겨야합니다. 필드 값. Ajax 호출에 참여하는 모든 컨트롤을 업데이트 패널에 넣어야합니다.

<form id="Form1" class="form" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
     <asp:UpdatePanel ID="uppnlLatLong" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
       <asp:HiddenField ID="txtLatitude" runat="server" /> 
       <asp:HiddenField ID="txtLongitude" runat="server" /> 
       <asp:Button ID="btnCalculateCoordinates" runat="server" Text="Post It!" onClientclick="calculateCoordinates();" onclick="btnCalculateCoordinates_Click" /> 


당신은 전화가 서버에 들어가기 전에 아약스 메서드를 호출의 ASP .NET의 begin_request 아약스 이벤트를 사용할 수 있습니다.

Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(beginRequestHandler); 

function BeginRequestHandler(sender, args) 
{ 
     calculateCoordinates(); 
} 
+0

ScriptManager 및 UpdatePanel은 양식 안에 있어야합니다. – k80sg

+0

예, 답변을 업데이트했습니다. – Adil

+0

이것은 작동하지 않습니다. 포스트 백이 내 서버 메소드를 먼저 실행하므로 내 HiddenField 값을 가져올 수 없습니다. 내가 한 일은 성공적으로 값을 설정 한 후 자바 스크립트에서 버튼 클릭을 호출하는 것입니다. – k80sg

관련 문제