我希望用户能够获得最近的用户。所以,我必须从浏览器中获取用户的经度和纬度,并将其发送到下面的 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 - 即使我解决了这个问题,我也不确定这是否是实现目标的最佳方式,即消费者请求供应商并将最接近的供应商之一发送给他,就像优步一样。关于如何最好地实现这一目标的建议将不胜感激。