2017-07-03 111 views
0

我试图JSON数据传递从视图控制器,但控制器获得空所有我在这里尝试每一件事情来解决这个问题,但没有找到任何解决办法的时候是我的控制器和JSON数据控制器没有得到JSON数据

$("#ex_save").on("click",function() { 
     var array = @Html.Raw(Json.Encode(Model)); 
     var json = JSON.stringify(array); 
     $.ajax({ 
      type: "POST", 
      url: "/Equipment/BulkUpdate", 
      data: { jsonCollection : json }, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function() { 
       console.log("Saved"); 
      }, 
      error: function (e) { 
       console.log(e); 
      } 
     }); 
    }); 

这是我的ajax方法将数据传递给控制器​​。 这里是我的控制器来获得这些数据: -

[HttpPost] 
    public ActionResult BulkUpdate(string jsonCollection) 
    { 
     try 
     { 
      return View(); 
     } 
     catch 
     { 
      throw; 
     } 
    } 

这里是我传递 enter image description here

这里的JSON是错误: - enter image description here

+0

有你内JSON发送JSON,而不是仅仅使用标准ModelBinder的具体原因是什么?看起来你只是增加了复杂性,除了给自己更多的工作之外没有任何理由。 –

+0

@RoryMcCrossan我有我展示的视图,以便用户可以对其进行编辑,然后按提交保存编辑的表格,但我已经分页所以只通过第一页的数据采集控制器,所以我想这样。 – Abhay

+0

你传递一个字符串,并期望得到一个字符串,但你的$就调用告诉它,它实际上是JSON(如果它不是,它是一个字符串)。将contentType更改为字符串或将其删除。 https://stackoverflow.com/a/18701357/2181514 –

回答

1

你需要做的这

$("#ex_save").on("click",function() { 
     var array = @Html.Raw(Json.Encode(Model)); 
     var jsonData = {jsonCollection : array}; 
     var postJson = JSON.stringify(jsonData); 
     $.ajax({ 
      type: "POST", 
      url: "/Equipment/BulkUpdate", 
      data: postJson, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function() { 
       console.log("Saved"); 
      }, 
      error: function (e) { 
       console.log(e); 
      } 
     }); 
    }); 

你在做什么是你已经使用JSON.stringify()的JSON转换成array变量,然后你到新的JSON对象{ jsonCollection : json }作为POST请求主体分配这一点。因此,它是像 {'name':'test1', 'age':'12'} 一个有效的JSON对象,然后jQuery的可能不将其作为JSON数据,而是它序列化到name=test1&age=12 从而得到错误 "Invalid JSON primitive: name"

而在你的情况,"Invalid JSON primitive: jsonCollection"。所以请尝试使用上述代码。和

+0

它帮助现在没有得到错误,但仍然没有获得控制器的集合值。 – Abhay

+0

但我认为这里的问题是解决错误。现在,您需要检查服务器中的响应数据或请求负载并进行调试。 –

+0

我也认为它应该是绿色标记的答案解决了错误。 –

0
$("#ex_save").on("click",function() { 
    var array = @Html.Raw(Json.Encode(Model)); 
    var jsonData = {jsonCollection : array}; 
    var postJson = JSON.stringify(jsonData); 
    $.ajax({ 
     type: "POST", 
     url: "/Equipment/BulkUpdate", 
     data: postJson, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function() { 
      console.log("Saved"); 
     }, 
     error: function (e) { 
      console.log(e); 
     } 
    }); 
}); 

而不是在控制器尝试获取字符串获取ICollection的

[HttpPost] 
public ActionResult BulkUpdate(ICollection<your_class_type> jsonCollection) 
{ 
    try 
    { 
     return View(); 
    } 
    catch 
    { 
     throw; 
    } 
}