如何将 HTML 地理定位纬度和经度值从视图发送到控制器操作方法

How to send HTML geolocation latitude and longitude values from view to controller action method

我希望一个用户能够得到最近的用户。因此,我必须从浏览器获取用户的经度和纬度并将其发送到下面的 OnPost 操作方法。每次用户访问该网站时,该位置都会更新。 注意:在控制器中取坐标的点class来自用于建模和操纵二维线性几何的NetTopologySuite库

[HttpPost]
public async Task<IActionResult> Profile(ProfileViewModel profileModel, double latitude, double longitude)
{
    var user = await _userManager.GetUserAsync(User);
    if (ModelState.IsValid)
    {
        if (user.DOB != profileModel.DOB) user.DOB = profileModel.DOB;
        user.Location = new Point(latitude, longitude) { SRID = 4326 };
    }
}

在视图中,我试图将坐标设置为脚本中表单中定义的 asp-路线,以便我可以在控制器中使用它,但纬度和经度没有发送到上面的操作方法。我是 jQuery

的新手
<form asp-controller="Account" asp-action="Profile" method="post" asp-route-latitude="" asp-route-longitude="">
    <label asp-for="DOB"></label>
    <input asp-for="DOB" class="form-control" />
</form>
<script type="text/javascript">
    var x = document.getElementById("Location");
    window.onload = function () {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition);
        }
        else {
            console.log("Geolocation not supported by browser.");
       }
    }
    function showPosition(position) {
        $("form").attr("asp-route-latitude", position.coords.latitude);
        $("form").attr("asp-route-longitude", position.coords.longitude);
    }
</script>

PS - 即使我解决了这个问题,我也不确定这是否是实现消费者请求供应商并且将最近的供应商之一发送给他的目标的最佳方式像优步。非常感谢有关如何最好地实现这一目标的建议。

您需要 ajax 调用 controller/action 方法来发送数据

<script type="text/javascript">
    var x = document.getElementById("Location");
    window.onload = function () {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition);
        }
        else {
            console.log("Geolocation not supported by browser.");
       }
    }
    function showPosition(position) {
        $("form").attr("asp-route-latitude", position.coords.latitude);
        $("form").attr("asp-route-longitude", position.coords.longitude);

       $.ajax({
             url : '[controller_name]/Profile?latitude='+position.coords.latitude+'&longitude='+position.coords.longitude,
             type : 'POST',
             data : {
                 'profileModel' : {}
             },
             dataType:'json',
             success : function(data) {              
                 console.log(data);
             },
             error : function(request,error){
                 console.log(error);
             }
         });
    }
</script>