2016-12-05 126 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

相關問題