GeoLocation,然后是C#事件 - 如何实现

时间:2013-11-20 15:54:28

标签: c# javascript asp.net geolocation

我目前正在尝试在我的asp.net项目中实现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。

1 个答案:

答案 0 :(得分:0)

这篇文章虽然没有直接关系,但可能会对您有所帮助:

navigator.geolocation.getCurrentPosition sometimes works sometimes doesn't

引用可能与您相关的部分:

'[...] getCurrentPosition的默认超时为无限(!)。这意味着如果getCurrentPosition在后端某处挂起,那么永远不会调用你的错误处理程序。'

所以请记住这一点。

关于C#部分,我不知道你是否已经启动和运行,所以有很多方法可以做到这一点。例如,AJAX call to a handler page。或者,如果您正在使用JQuery,则需要$.Get来电。或者将值存储在隐藏字段上,然后捕获代码隐藏上的值。