[英]MVC pass json data to controller
EDIT: Thanks for catching these errors Ash There were 3 problems here编辑:感谢您捕获这些错误 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
I am trying to pass some json data to a controller.我正在尝试将一些 json 数据传递给控制器。 When ever I pass a js Object
to the Controller
my model is null.当我将一个 js Object
传递给Controller
我的模型为空。 Shouldn't the default model binder take care of this?默认模型绑定器不应该处理这个问题吗? I can't find out why I am getting null when passing data to the controller.我不知道为什么在将数据传递给控制器时我会得到空值。 I have looked at other SO questions but none have helped so far.我查看了其他 SO 问题,但到目前为止没有任何帮助。
The data looks like this数据看起来像这样
{
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
}
These are what my DTO's look like这些是我的 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; }
}
My controller looks like this我的控制器看起来像这样
[HttpPost]
public BetterJsonResult SaveGanttChartData(GanttRequestDto ganttDataModel)
{
//do something
return null;
}
My JS code我的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);
});
}
Here is what my Ajax request looks like这是我的 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);
}
});
};
Here is the fix for your issue.这是您的问题的解决方法。
Two things here:这里有两件事:
I assume the JSON sample data you provided is pure hand tailored, but still mentioning that the data is having few typos.我假设您提供的 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"}] }
You have not marked the data members as properties with getters and setters.您尚未使用 getter 和 setter 将数据成员标记为属性。
public class GanttRequestDto { public IEnumerable<GanttTaskDto> Data { get; set; } public IEnumerable<GanttLinkDto> Links { get; set; } }
Well try now and let me know if it works for you or not.好吧,现在试试,让我知道它是否适合你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.