【问题标题】:Passing a value from a JsonResult method to another method将值从 JsonResult 方法传递到另一个方法
【发布时间】:2016-12-06 03:33:42
【问题描述】:

在我的 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?

编辑,这里是Index方法:

public object x;
     public async Task<ActionResult> Index()
            {


                x = Session["lat"];


                return View(parkingLot);
            }

【问题讨论】:

  • 您是否在同一个请求中访问它们?
  • 我不确定,Index加载并获取坐标后,将其发送到JsonResult。
  • 尝试将 postData 作为对象而不是字符串传递。数据:发布数据。另一件事要检查...您是否在 javascript 上设置了调试器以确保您的 Lat 和 Long 不为 0?
  • 我做了你说的那个改变,我要在方法中修改什么?不,我没有设置它

标签: javascript c# asp.net-mvc


【解决方案1】:

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

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

【讨论】:

  • 所以我把它改成了 Session["lat"] = postData.Lat;然后在索引控制器中我使用 x = Session["lat"]; ? (公共对象 x)因为它不起作用不知道我做错了什么
  • 我放了一个断点,但 x 仍然为空,我认为我做错了什么
  • AjaxTest动作中,postData是否为空?
  • 我不能在工作中使用聊天功能,如果您还没有弄清楚,我离开后可以提供更多帮助。
【解决方案2】:

您可以使用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

【讨论】:

  • @crystyxn var lat and lng from index method is null?
猜你喜欢
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多