使用Javascript

时间:2017-08-03 06:25:37

标签: javascript c# html asp.net geolocation

我正在调用HTML地理位置方法来获取纬度和经度,然后将它们存储到2个单独的HiddenField中。然后,来自HiddenFields的这些值将用于服务器端(代码隐藏),它将存储在我的数据库的表中。我在stackoverflow上搜索高低,以获取HiddenFields中空值的帮助,将纬度和经度保存到数据库,客户端和服务器端按钮单击等。

我实际上是基于一个按钮触发这个javascript方法,或者你认为最好被解雇window.onload?

我怀疑这些功能也没有被解雇..我对javascript知之甚少..感谢任何帮助..

我的WebForm中的Javascript代码和HiddenFields:

<asp:HiddenField runat="server" ClientIDMode="Static" ID="latitudeTB"/>
<asp:HiddenField runat="server" ClientIDMode="Static" ID="longitudeTB"/>

<script type="text/javascript">
    function HideLabel() {
        var seconds = 3;
        setTimeout(function () {
            document.getElementById("<%=ErrorPanel.ClientID %>").style.display = "none";
        }, seconds * 1000);
    };

    //GeoLocation Retrieval
    var latJS = 0;
    var lngJS = 0;
    function getLocation() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition);
        }
    }

    function showPosition(position) {
        //position.coords.latitude + "," + position.coords.longitude;
        //var lat = document.getElementById("<%=latitudeTB.ClientID %>");

        latJS = position.coords.latitude;
        lngJS = position.coords.longitude;

        document.getElementById("<%= latitudeTB.ClientID %>").value = latJS;
        document.getElementById("<%= longitudeTB.ClientID %>").value = lngJS;

        alert(document.getElementById("<%= latitudeTB.ClientID %>").value + " " + document.getElementById("<%= longitudeTB.ClientID %>").value);

        /*if (lat) {
            lat.value = position.coords.latitude;
        }*/

        //var long = document.getElementById("<%=longitudeTB.ClientID %>");

        /*if (long) {
            long.value = position.coords.longitude;
        }*/
    }

    function call() {
        getLocation();
        showPosition(position);
    }
</script>

FYI。该按钮位于HiddenFields和Javascript ..

之上

asp代码:按钮:

<asp:Button ID="BTN_Login" CssClass="btn btn-theme-dark" Text="Login" runat="server" OnClientClick="call();" OnClick="BTN_Login_Click" />

我确实打印出了服务器端隐藏字段的值,但我根本没有得到任何值..

    Debug.WriteLine(latitudeTB.Value);
    Debug.WriteLine(longitudeTB.Value);

我希望我添加的代码足够..

1 个答案:

答案 0 :(得分:1)

在按钮点击事件或窗口加载事件上设置此项可归结为您的用户体验。

大多数网站都倾向于在DOM准备就绪时显示地理位置提示。

您需要调整getLocation功能。 getCurrentPosition接受成功和错误回调,两者都没有被传递。

function getLocation(opts) {
    return new Promise(function(resolve, reject) {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition( resolve,
                reject,
                opts
            );
        } 
        else {
            reject(new ReferenceError('Browser does not support geolocation api'));
        }

    });
}

然后您可以这样使用它:

function setLatLong(latId, longId) {
    getLocation()
    .then(function(pos) {
       var coords = pos.coords;
       document.getElementById(latId).value = coords.latitude;
       document.getElementById(longId).value = coords.longitude;
    })
    .catch(function(err) {
      // log or fall back to come other Location API?
    })
}


function call() {
   setLatLong(
     "<%= latitudeTB.ClientID %>",
     "<%= longitudeTB.ClientID %>");
}

参考: