Asp.net-Mvc
將json發送到控制器時,ASP.NET mvc 4控制器參數始終為空,為什麼?
這裡已經有一些類似的文章,並嘗試了建議的所有解決方案,但仍然無法正常工作……我無法在控制器中獲取值,它始終為空。下面是程式碼。我錯過了什麼嗎?
客戶端javascript
function getChart() { JSONString3 = { HAxis : [{ Name : "monday" }] }; jQuery.ajaxSettings.traditional = true; $.ajax({ url: "@Url.Action("getChart","SBM")", type: 'POST', contentType: 'json', dataType: 'html', data: JSONString3, success: function (data) { var imagestring = btoa(data); $('#ChartImage').attr('src', "data:image/png;base64," + imagestring + "?" + new Date().getTime()); } }) jQuery.ajaxSettings.traditional = false; }MVC 控制器
[Authorize] [HttpPost] public ActionResult getChart(YAxis HAxis) { YAxis XAxisvalue = HAxis; Charts chart = new Charts(); MemoryStream ms = new MemoryStream(); chart.Chart.SaveImage(ms); string image = Convert.ToBase64String(ms.GetBuffer()); return File(ms.GetBuffer(), "image/png", "Chart.png"); }模型
public class YAxis { public string Name { get; set; } }
謝謝各位大佬的指點和解決方法。解決方案是您所有建議的組合,因此我決定在一篇文章中對其進行匯總。
問題的解決方法如下:
contentType應該是application/json(如上面建議的 Ant P)- json 數據應採用以下形式
JSONString3 = {"Name" : "monday" }(如上面的 Ant P 建議)- 在發送到控制器之前,json 應
stringifyed如下所示:(JSONString3 = JSON.stringify(JSONString3)如 Quan 建議的那樣)客戶端javascript
function getChart() { JSONString3 = { "Name" : "monday" }; jQuery.ajaxSettings.traditional = true; $.ajax({ url: "@Url.Action("getChart","SBM")", type: 'POST', contentType: 'application/json', dataType: 'html', data: JSON.stringify(JSONString3), success: function (data) { var imagestring = btoa(data); $('#ChartImage').attr('src', "data:image/png;base64," + imagestring + "?" + new Date().getTime()); } }) jQuery.ajaxSettings.traditional = false; }MVC 控制器
[Authorize] [HttpPost] public ActionResult getChart(YAxis HAxis) { YAxis XAxisvalue = HAxis; Charts chart = new Charts(); MemoryStream ms = new MemoryStream(); chart.Chart.SaveImage(ms); string image = Convert.ToBase64String(ms.GetBuffer()); return File(ms.GetBuffer(), "image/png", "Chart.png"); }模型
public class YAxis { public string Name { get; set; } }而不是這個:
JSONString3 = { "Name" : "monday" };我們做得到:
var JSONString3 = {}; JSONString.Name = "monday";但是我們仍然需要在發佈到控制器之前對對象進行字元串化!!!
要將多個對像傳遞給控制器,下面是範例
客戶端javascript
function getChart() { //first json object //note: each object Property name must be the same as it is in the Models classes on server side Category = {}; Category.Name = "Category1"; Category.Values = []; Category.Values[0] = "CategoryValue1"; Category.Values[1] = "CategoryValue2"; //second json object XAxis = {}; XAxis.Name = "XAxis1"; XAxis.Values = []; XAxis.Values[0] = "XAxisValue1"; XAxis.Values[1] = "XAxisValue2"; //third json object YAxis = {}; YAxis.Name = "YAxis1"; //convert all three objects to string //note: each object name should be the same as the controller parameter is!! var StringToPost = JSON.stringify({CategoryObject : Category, XAxisObject : XAxis, YAxisObject : YAxis}); $.ajax({ url: "@Url.Action("getChart","SBM")", type: 'POST', contentType: "application/json", dataType: 'html', data: StringToPost, success: function (data) { var imagestring = btoa(data); $('#ChartImage').html(data); } }) }MVC 控制器
[HttpPost] public ActionResult getChart(Category CategoryObject, XAxis XAxisObject, YAxis YAxisObject) { //do some stuff with objects here and return something to client return PartialView("_Chart"); }類別型號
public class Category { public string Name { get; set; } public List<string> Values { get; set; } }X軸模型
public class XAxis { public string Name { get; set; } public List<string> Values { get; set; } }Y軸模型
public class YAxis { public string Name { get; set; } }希望它能幫助某人澄清整個畫面!