簡體   English   中英

MVC 將 json 數據傳遞給控制器

[英]MVC pass json data to controller

編輯:感謝您捕獲這些錯誤 Ash 這里有 3 個問題

1. The JSON request was too large to be deserialized I had to add <add key="aspnet:MaxJsonDeserializerMembers" value="150000" /> in the app settings
2. I forgot the getters and setters in one of my classes
3. I misspelled one of my properties

我正在嘗試將一些 json 數據傳遞給控制器​​。 當我將一個 js Object傳遞給Controller我的模型為空。 默認模型綁定器不應該處理這個問題嗎? 我不知道為什么在將數據傳遞給控制器​​時我會得到空值。 我查看了其他 SO 問題,但到目前為止沒有任何幫助。

數據看起來像這樣

{
Data: [{
       duration: 5,
       end_date: "06-04-2013 00:00"
       id: 1,
       open: true,
       parent: 0,
       progress: 0,
       start_date: "01-04-2013 00:00",
       text : "PcB ddCcgoMordiF Arr e"
      }]
Links: //empty array of something similar
}

這些是我的 DTO 的樣子

public class GanttRequestDto
{
    public IEnumerable<GanttTaskDto> Data;
    public IEnumerable<GanttLinkDto> Links;
}



 public class GanttTaskDto
    {
         public int Id { get; set; }
         public string Test { get; set; }
         public DateTime Start_date { get; set; }
         public DateTime  End_date { get; set; }
         public int Duration { get; set; }
         public bool Open { get; set; }
         public decimal Progress { get; set; }
         public int? ParentId { get; set; }
}

public class GanttLinkDto
{
     public int Id { get; set; }
     public string Type { get; set; }
     public int Source { get; set; }
     public int Target { get; set; }
}

我的控制器看起來像這樣

[HttpPost]
public BetterJsonResult SaveGanttChartData(GanttRequestDto ganttDataModel)
{
    //do something
    return null;
}

我的JS代碼

InitSaveButton() {
    $("#save-btn").click(function() {
        var ganttData = gantt.serialize();
        var model = {
            Data: ganttData.data,
            Links: ganttData.links
        };
        Ajax.ajaxRequest(null, "/Gantt/SaveGanttChartData?ganttDataModel",  model, null, "Saving Gantt Data", "Success", null);
    });
}

這是我的 Ajax 請求的樣子

//url:string
//model:json object
//updateId (optional): area to update,
//toastMessage: optional toast message
//toasTitle: optional toast title
//onComplete: optional callback function
Ajax.ajaxRequest = function (httpVerb, url, model, updateId, toastMessage, toastTitle, onComplete) {
    if (httpVerb === null || httpVerb.length === 0) httpVerb = "POST";
    $.ajax({
        url: url,
        type: httpVerb,
        cache: false,
        data: JSON.stringify(model),
        dataType: "json",
        contentType: 'application/json; charset=utf-8'
    }).done(function (data) {
        Ajax.ajaxSuccess(data, updateId, toastMessage, toastTitle);
    }).fail(function (err) {
        Ajax.ajaxFailure(err);
    }).always(function (data) {
        if (onComplete && typeof onComplete === 'function') {
            onComplete(data);
        }
    });
};

這是您的問題的解決方法。

這里有兩件事:

  1. 我假設您提供的 JSON 示例數據是純手工定制的,但仍然提到數據幾乎沒有錯別字。

     var data = { Data: [{ duration: 5, end_date: "06-04-2013 00:00", id: 1, open: true, parentId: 0, progress: 0, start_date: "01-04-2013 00:00", test : "PcB ddCcgoMordiF Arr e" }], Links: [{Id : 1, Type: "sdsd"}] }
  2. 您尚未使用 getter 和 setter 將數據成員標記為屬性。

     public class GanttRequestDto { public IEnumerable<GanttTaskDto> Data { get; set; } public IEnumerable<GanttLinkDto> Links { get; set; } }

好吧,現在試試,讓我知道它是否適合你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM