在我的HomeController中,我有以下方法:
public JsonResult AjaxTest(Position postData)
{
Session["lat"] = postData.Lat;
Session["lng"] = postData.Long;
return Json("", JsonRequestBehavior.AllowGet);
}
如何在我的Index方法中使用lat和lng?
public async Task<ActionResult> Index()
,如果重要的话。
视图中正在检索并传递用户当前坐标的脚本:
var x = document.getElementById("positionButton");
(function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
}());
function showPosition(position)
{
if (position == null) alert('Position is null');
if (position.coords == null) alert('coords is null');
$('#lat').text(position.coords.latitude);
$('#long').text(position.coords.longitude);
var postData = { Lat: position.coords.latitude, Long: position.coords.longitude };
$.ajax(
{
type: "POST",
contentType: "application/json; charset=utf-8",
url: "@Url.Action("AjaxTest", "Home")",
//dataType: "json",
data: JSON.stringify(postData)
});
}
我需要能够让用户当前的纬度/经度来获得到另一个位置的距离。 lat和lng被声明为公共变量,那么为什么在尝试使用Index方法中的坐标时它们保持为0?
编辑,这是索引方法:
public object x;
public async Task<ActionResult> Index()
{
x = Session["lat"];
return View(parkingLot);
}
答案 0 :(得分:1)
如果在控制器中声明变量,则可以解释为什么它们为零。
控制器是基于每个请求创建的。因此,如果您按AjaxTest
并设置纬度/经度,当JsonResult
返回到ajax调用时,将处理带有变量的控制器。尝试使用Session
而不是变量。请参阅here。
答案 1 :(得分:0)
您可以使用TempData
将数据置于AjaxTest
行动中,如下所示:
public ActionResult AjaxTest(Position postData)
{
this.TempData["lat"] = postData.Lat;
this.TempData["lng"] = postData.Long;
return RedirectToAction("Index");
}
在索引操作中,您可以像这样检索数据:
public async Task<ActionResult> Index()
{
var lat = this.TempData["lat"];
var lng = this.TempData["lng"];
return View(parkingLot);
}