将值从JsonResult方法传递到另一个方法

时间:2016-12-05 18:37:25

标签: javascript c# asp.net-mvc

在我的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);
            }

2 个答案:

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

When to use TempData vs Session in ASP.Net MVC