-1

我希望用户能够获得最近的用户。所以,我必须从浏览器中获取用户的经度和纬度,并将其发送到下面的 OnPost 操作方法。每次用户访问网站时,位置都会更新。注意:在控制器中获取坐标的点类来自用于建模和操作二维线性几何的 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-routes,以便我可以在控制器中使用它,但纬度和经度不会发送到上面的操作方法。我是 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 - 即使我解决了这个问题,我也不确定这是否是实现目标的最佳方式,即消费者请求供应商并将最接近的供应商之一发送给他,就像优步一样。关于如何最好地实现这一目标的建议将不胜感激。

4

1 回答 1

1

您需要对控制器/操作方法进行 ajax 调用以发送数据

<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>
于 2020-08-07T21:05:48.040 回答