2013-11-20 50 views
0

我目前正試圖在我的asp.net項目中實現GeoLocation。該代碼將使用地理位置獲取用戶的位置並更新緯度和經度標籤。一旦經度標籤更新了,它就會觸發一個C#事件,它將根據這些值執行操作。GeoLocation,然後C#事件 - 如何實現

唯一的問題是,這似乎發生得太快 - 我不知道爲什麼!我也有點卡住設備來測試它,但這是另一回事。長話短說,在移動設備上,該頁面會詢問我是否允許其訪問我的位置,但同時它會在後臺刷新頁面。

代碼是:

<asp:TextBox ID="lblLat" runat="server" BorderColor="White" BorderStyle="None" ForeColor="Black" Width="100px"></asp:TextBox> 
     <asp:TextBox ID="lblLon" runat="server" BorderColor="White" BorderStyle="None" ForeColor="Black" Width="100px" OnTextChanged="btnByProximity_Click"></asp:TextBox> 

<button id="btnProximity" onclick="GetLocation()" runat="server" style="width: 30%">Proximity</button> 

     <script type="text/javascript"> 

      function GetLocation() 
      { 
       if (navigator.geolocation) 
       { 
        navigator.geolocation.getCurrentPosition(ShowPosition, ShowError); 
       } 
       else { alert("Geolocation is not supported by this browser."); } 
      } 
      function ShowPosition(position) 
      { 
       document.getElementById("lblLat").value = position.coords.latitude; 
       document.getElementById("lblLon").value = position.coords.longitude; 
       //document.getElementById("lblChange").value = document.getElementById("lblChange").value + 1 
      } 
      function ShowError(error) 
      { 
       if (error.code == 1) 
       { 
        alert("User denied the request for Geolocation.") 
       } 
       else if (error.code == 2) 
       { 
        alert("Location information is unavailable.") 
       } 
       else if (error.code == 3) 
       { 
        alert("The request to get user location timed out.") 
       } 
       else 
       { 
        alert("An unknown error occurred.") 
       } 
      } 


     </script> 

在頂部,我們有兩個緯度和經度的標籤,lblLat和lblLon。當lblLon被改變時,我們觸發btnByProximity_Click事件。我們的btnProximity調用了應該獲取位置的GetLocation事件並更新lblLat和lblLon。

+0

您正在混合服務器端和客戶端事件,我認爲這不會起作用。什麼是確切的期望行爲?其實我不認爲你需要你的'OnTextChanged'事件(這可能導致PostBack因此刷新頁面)。如果你的客戶端動作需要更新服務器端的東西,AJAX可能會有所幫助...... –

+0

希望的行爲是獲取經度和緯度,放入它們各自的標籤中,以便可以使用它們,並以某種方式解開c#事件。在OnTextChanged上做它是我能想到的唯一方法。 – user1560834

回答

0

這篇文章,雖然沒有直接的關係,可能會出現一些使用您:

navigator.geolocation.getCurrentPosition sometimes works sometimes doesn't

報價,可能是與你有關的部分:

「[...]的getCurrentPosition的默認超時值是無限的(!)。這意味着如果getCurrentPosition掛在後端的某個地方,你的錯誤處理程序將永遠不會被調用。

所以請記住這一點。

關於C#部分,我不知道你是否已經啓動並運行,所以有很多方法可以做到這一點。例如,一個AJAX call to a handler page。或者,如果您使用的是JQuery,則可撥打$.Get。或者將值存儲在隱藏字段中,稍後捕獲代碼隱藏的值。