2016-12-05 102 views
0

在我的HomeController我有以下方法:传递一个值从JsonResult方法,另一种方法

public JsonResult AjaxTest(Position postData) 
{ 
     Session["lat"] = postData.Lat; 
     Session["lng"] = postData.Long; 

    return Json("", JsonRequestBehavior.AllowGet); 
} 

我怎么能有纬度和经度在我的索引方法?

它是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

你在相同的请求中访问它们? – JB06

+0

我不确定,在Index加载并获取坐标后,它将它发送到JsonResult。 – crystyxn

+0

尝试将postData作为对象传递,而不是字符串。数据:postData。另一件事要检查...你有没有在你的javascript上设置一个调试器来确保你的Lat和Long不是0? – Daryl

回答

1

如果变量在控制器中声明,这可以解释为什么他们是零。

控制器是基于每个请求创建的。因此,如果您击中AjaxTest并设置纬度/经度,则当JsonResult返回到ajax调用时,带有您的变量的控制器将被丢弃。尝试使用Session而不是变量。见here

+0

所以我改变它为Session [“lat”] = postData.Lat;然后在索引控制器中使用x = Session [“lat”]; ? (公共对象x)因为它不工作不知道什么即时做错 – crystyxn

+0

定义“不起作用” – JB06

+0

我把一个断点,但x仍然为空,我做了错误,我认为 – crystyxn

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); 
} 

When to use TempData vs Session in ASP.Net MVC

+0

我该如何测试?我在哪里放置断点? – crystyxn

+0

它仍然为空... – crystyxn

+0

@crystyxn从索引方法var lat和lng是空的? – TotPeRo

相关问题