Asp.net-Mvc

將json發送到控制器時,ASP.NET mvc 4控制器參數始終為空,為什麼?

  • November 28, 2018

這裡已經有一些類似的文章,並嘗試了建議的所有解決方案,但仍然無法正常工作……我無法在控制器中獲取值,它始終為空。下面是程式碼。我錯過了什麼嗎?

客戶端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; }
}

謝謝各位大佬的指點和解決方法。解決方案是您所有建議的組合,因此我決定在一篇文章中對其進行匯總。

問題的解決方法如下:

  1. contentType應該是application/json(如上面建議的 Ant P)
  2. json 數據應採用以下形式JSONString3 = {"Name" : "monday" }(如上面的 Ant P 建議)
  3. 在發送到控制器之前,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; }
}

希望它能幫助某人澄清整個畫面!

引用自:https://stackoverflow.com/questions/20384242