gpt4 book ai didi

javascript - MVC Controller 在页面加载时被击中两次

转载 作者:行者123 更新时间:2023-11-30 17:43:40 27 4
gpt4 key购买 nike

我的 MVC Controller 在页面加载时被命中两次,我不知道如何解决这个问题。

我在布局页面中使用 navigator.geolocation.getCurrentPosition,它将纬度和经度传递到我的 Controller 。

我在 div 中有 RenderAction,以防万一用户禁用了 JavaScript,有些人仍然这样做
:-(

这就是导致我的问题的原因:
RenderAction 将首先呈现并点击 Controller 。然后,AJAX 请求被触发并到达 Controller 。

所以我的 Controller 在每个请求中被命中两次。

有没有我遗漏的东西可以阻止它,因为目前,我能想到的就是从页面中删除渲染操作。

代码:

<div class="dvWeather">
@{ Html.RenderAction("PvCurrentWeatherConditions", "Weather"); }
</div>

if (navigator.geolocation) {
// alert("Geo-Enabled");
navigator.geolocation.getCurrentPosition(showPosition, showError);
}

function showPosition(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var aj = "gl";

$.ajax({
url: '@Url.Action("PvCurrentWeatherConditions", "Weather")',
type: 'get',
data: {
lat: lat,
lon: lon,
aj: aj
},
success: function (result) {
$('.dvWeather').html(result);
}
});
}

public PartialViewResult PvCurrentWeatherConditions(string lat, string lon, string aj)
{

if (Request.IsAjaxRequest())
{
try
{
//TODO create Viewmodel
GeoCoordinate gc = new GeoCoordinate();
var latitude = gc.Latitude = Convert.ToDouble(lat);
var longitude = gc.Longitude = Convert.ToDouble(lon);
string latlon = latitude + "," + longitude;
var displayCurrentConditions = _igcc.CurrentConditions(latlon);
return PartialView("pvCurrentWeatherConditions");
}
catch (FormatException)
{
//TODO get ip address
return PartialView("pvLocationBasedOnIpAddress");
}
catch (Exception)
{
return PartialView("pvError");
}
}
return PartialView("pvLocationBasedOnIpAddress");
}

最佳答案

也许使用另一种方法来检查访问者是否禁用了 javascript,例如 noscript:

<noscript>
<meta http-equiv="refresh" content="[URL]?java=off">
</noscript>

然后在新操作中处理查询字符串。

关于javascript - MVC Controller 在页面加载时被击中两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20556358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com