Согласно ответам в этой публикации , привязка к объекту Dictionary, как вы обрисовали, изначально не поддерживается. Однако один из ответов на тот же вопрос, очевидно, создал пользовательский ModelBinder для достижения желаемого результата.
Если вы имеете больший контроль над входящими данными JSON, вы можете сделать что-то вроде этого:
public class OraViewModel
{
public IList<LineItem> LineItems { get; set; }
}
public class LineItem
{
public string Name { get; set; }
public Duration Duration { get; set; }
}
public class Duration
{
public string Start { get; set; }
public string End { get; set; }
}
Тогда, с вашей точки зрения, вы должны написать так:
$('#buttonId').click(function () {
var data = { LineItems: [{ Name: "name 0", Duration: { Start: "start 0", End: "end 0"} }, { Name: "name 1", Duration: { Start: "start 1", End: "end 1"} }, { Name: "name 2", Duration: { Start: "start 2", End: "end 2"} }, { Name: "name 3", Duration: { Start: "start 3", End: "end 3"} }, { Name: "name 4", Duration: { Start: "start 4", End: "end 4"}}] };
$.ajax({
url: "/home/testpost2",
data: JSON.stringify(data), //*** using JSON2.js to stringify the js object
type: "POST",
contentType: 'application/json', // *** note the content type is set to json
dataType: 'json',
});
});
Это позволило следующему действию контроллера правильно связать входящие данные с моим объектом:
[HttpPost]
public ActionResult TestPost2(OraViewModel data)
{
return Json("whatever you want the return to be");
}