MVCは

2017-01-23 4 views
2

EDITをコントローラにJSONデータを渡す:ありがとうアッシュ これらのエラーをキャッチするために、私はコントローラにいくつかのJSONデータを渡すためにしようとしていますここでは3つの問題MVCは

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 

がありました。今まで私がControllerにjs Objectを渡すとき、私のモデルはnullです。これは、デフォルトのモデルバインダーで処理するべきではありませんか?私はコントローラにデータを渡すときになぜ私がnullになっているのかを知ることができません。私は他のSOの質問を見てきましたが、これまで助けてくれた人はいません。

データは、これらが

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; } 
} 

のように私のDTOの外観は、私のコントローラは、この

[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); 
    }); 
} 
ように見えるものです。この

{ 
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 
} 

のように見えますここ

は私の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); 
     } 
    }); 
}; 
+0

コントローラBetterJsonResultがnullを返すため、オブジェクトにデータが設定されていないため、返り値ganttDataModel – Fuzzybear

+0

@Fuzzybear申し訳ありませんが、それはそうではありません。 'ganttDataModel'は私が何を返しても' null'です。 –

+0

@Ashなぜ私はそれをしますか? –

答えて

1

のように見えるあなたの問題に対する修正は何かということです。ここ

2つのこと:

  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. ゲッターとセッターでプロパティとしてデータメンバーをマークしていません。

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

まあ今試してみて、それはあなたのために働くかどう私に知らせてください。

+1

良い主よ!ナイスキャッチ。私はゲッターとセッターを忘れてしまった。そして私の不動産はスペルミスだった。 'public string Test {get;セット; } ''の代わりに 'public string Text {get;セット; } 'と' JSON'データが大きすぎて直列化できません。 –