如何使用来自 Asp.net Core 中控制器的 Json 数据填充 Javascript var



我有一个返回 JsonResult 的控制器

    [HttpGet]
    public JsonResult ShopMarkers()
    {
        var shops = repository.Shops;
        return Json(shops);
    }

在我看来,我想用该方法的数据填充变量。在一个较旧的MVC项目中,我记得我会写一个ajax调用来填充var。像这样:

    var markers;
    $.ajax({
      type: 'POST',
      url: '/Map/ShopMarkers',
      dataType: 'json',
      contentType: dataType,
      data: data,
      success: function (result) {
          markers = result;
      }
   });

或者我可以将字符串返回到视图,然后在脚本标记中解析它。

这些似乎都不对。有没有更好的方法可以在 .Net Core 中填充我的变量?

您的客户端代码当前正在使用 POST 类型请求进行 ajax 调用。但是您的操作方法是用 HttpGet 修饰的。所以你应该收到一个 404 错误(如果你检查你的浏览器开发工具,你应该能够看到网络 (ajax( 调用的状态(

[HttpPost]
public JsonResult ShopMarkers()
{
    var shops = repository.Shops;
    return Json(shops);
}

假设您在方法中的代码没有崩溃ShopMarkers这应该可以工作!(抛出任何异常左右(

在客户端代码中,您正在尝试发送对象。如果要发送复杂对象,则应将 contentType 指定为"application/json",并使用JSON.stringify方法发送数据。

var dataType = "application/json";
var data = { userId: 12, Password: 'ss' };
$.ajax({
    type: 'POST',
    url: '/Home/ShopMarkers',
    dataType: 'json',  // not really needed in your case
    contentType: dataType,
    data: JSON.stringify(data),
    success: function (result) {
        var markers = result;
        console.log(result);
        //Use result only here. Not outside
    }
});

由于 ajax 调用在请求正文中发送数据,因此应使用 [FromBody] 属性修饰方法参数,以便模型绑定器能够将发布的数据(来自请求正文(映射到参数。

[HttpPost]
public JsonResult ShopMarkers([FromBody] YourUserViewModel model)
{
    //to do : Return some JSON
}

最新更新