如何在点击事件中插入数据库中的纬度和经度?

时间:2015-03-05 17:05:40

标签: c# asp.net

使用ASP.net和WebForms我试图将用户的位置(纬度,经度)存储到数据库。这就出现了问题:

我如何用户的经度和经度带到服务器端ASP.net代码可以将其保存到数据库中的位置。

你有什么尝试?

我不关心使用哪种技术;我只需要他们的位置。我的第一次尝试是尝试使用 Google地图来访问当前位置。虽然我可以在浏览器中使用javascript来获取当前位置,但我无法弄清楚如何将该信息传输到服务器。

以下是我第一次尝试的示例代码:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server">
   <title></title>
</head>
<body>
   <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
   <script type="text/javascript">
      var long = 0;
      var lat = 0;
      window.onload = function () {
         var mapOptions = {
            center: new google.maps.LatLng(18.9300, 72.8200),
            zoom: 14,
            mapTypeId: google.maps.MapTypeId.ROADMAP
         };
         var infoWindow = new google.maps.InfoWindow();
         var latlngbounds = new google.maps.LatLngBounds();
         var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
         google.maps.event.addListener(map, 'click', function (e) {
            long = e.latLng.lng();
            lat = e.latLng.lat();
            alert("Latitude: " + lat + "\r\nLongitude: " + long);
         });
      }
   </script>

   <div id="dvMap" style="width: 300px; height: 300px">
      <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
   </div>
</body> 
</html>

以下是 .aspx 代码隐藏文件。我们在按钮的单击事件期间保存数据库的经度和纬度:

protected void Button1_Click(object sender, EventArgs e)
{
    //TODO: Ask Stackoverflow how to get these values from browser-land javascript
    Double latitude = 0;
    Double longitude = 0;

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "@Data Source=(LocalDB)\v11.0;AttachDbFilename=Database.mdf;Integrated Security=True";

    string query1 = "insert into Courses(longi,lati) values (@lati, @longi)";

    SqlCommand cmd1 = new SqlCommand(query1, con);
    cmd1.Parameters.AddWithValue("@lati", latitude);
    cmd1.Parameters.AddWithValue("@longi", longitude);

    con.Open();
    cmd1.ExecuteNonQuery();
    con.Close();
}

位置API

没有什么说我需要使用谷歌地图。我知道HTML可以在某处以某种方式访问​​Location API。是否有一种既定的方法可以使用浏览器的 Location API 将用户的位置提供给ASP.net中的服务器?

1 个答案:

答案 0 :(得分:1)

添加asp隐藏字段,使用runat =&#34; server&#34;拿着lat和lng。当您在javascript中获得lat和lng时,只需使用这些值填充隐藏字段即可。然后,您可以直接在OnClick处理程序中引用隐藏字段值。

<html xmlns="http://www.w3.org/1999/xhtml"> 
   <head id="Head1" runat="server">
   <title></title>
</head>
<body>
   <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
   <script type="text/javascript">
       var long = 0;
       var lat = 0;
       window.onload = function () {
           var mapOptions = {
               center: new google.maps.LatLng(18.9300, 72.8200),
               zoom: 14,
               mapTypeId: google.maps.MapTypeId.ROADMAP
           };
           var infoWindow = new google.maps.InfoWindow();
           var latlngbounds = new google.maps.LatLngBounds();
           var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
           google.maps.event.addListener(map, 'click', function (e) {
               long = e.latLng.lng();
               lat = e.latLng.lat();
               document.getElementById("lat").value = lat;
               document.getElementById("lng").value = long;
               alert("Latitude: " + lat + "\r\nLongitude: " + long);
           });
       }
   </script>

<form id="myForm" runat="server">
   <div id="dvMap" style="width: 300px; height: 300px">
   </div>
   <asp:HiddenField ID="lat" runat="server" />
   <asp:HiddenField ID="lng" runat="server" />
   <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

</form>
</body>

代码背后:

    protected void Button1_Click(object sender, EventArgs e)
    {
        //TODO: Ask Stackoverflow how to get these values from browser-land javascript
        Double latitude = Convert.ToDouble(lat.Value);
        Double longitude = Convert.ToDouble(lng.Value);

        SqlConnection con = new SqlConnection();
        con.ConnectionString = "@Data Source=(LocalDB)\v11.0;AttachDbFilename=Database.mdf;Integrated Security=True";

        string query1 = "insert into Courses(longi,lati) values (@lati, @longi)";

        SqlCommand cmd1 = new SqlCommand(query1, con);
        cmd1.Parameters.AddWithValue("@lati", latitude);
        cmd1.Parameters.AddWithValue("@longi", longitude);

        con.Open();
        cmd1.ExecuteNonQuery();
        con.Close();

    }