我正在尝试使用以下类型的形式发送复杂的Json:
{
"Success":false,
"ErrorMessage":{
"ErrorMessage":"Some Message",
"ErrorType":"Serialization Failed",
"SiteReportDescription":"Some Desc",
"Status":false
},
"Result":null
}
到以下控制器:
[Authorize, HttpPost]
public ActionResult DoThing(ThingModel model)
{
return Json(true);
}
接受以下模型(ThingError是json中提到的四个字段的另一个对象):
public class ThingModel
{
public bool Success { get; set; }
public ThingError ErrorMessage { get; set; }
public ThingResult Result { get; set; }
}
我已使用以下两种方法与此Controller进行通信:
var form = $('<form method="post" enctype="multipart/form-data" style="visibility:hidden;"><input type="submit" name="model" /></form>');
$(document.body).append(form);
form.attr("action", '@Url.Action("DoThing", "Script")');
form.find("input[name='model']").val(JsonString);
form.submit();
$.ajax({
type: 'POST',
url: '@Url.Action("DoThing", "Script")',
contentType: "application/json; charset=utf-8",
processData: false,
dataType: 'json',
data: JsonString,
success: function (result) { }
},
});
这两种通信方法都将与控制器进行交互,但只有Ajax请求才会发送转换为控制器对象ThingModel的json字符串,form.submit只会将其保留为null。这背后的原因是什么?我在表格中做错了吗?
答案 0 :(得分:2)
你需要在小提琴手中捕捉这个,以便了解原因。
基本上,ajax调用正在传递:
{“Something”:“123”}
而形式正在传递这个:
{“Model”:{“Something”:“123”}}
不一样。