昨晚我试着把自从MVC2以来一直工作的东西放在一起。Form Encoded Javascript int [] not Binding Model Binder
考虑下面的类:
public class RouteSaveViewModel
{
public string Title { get; set; }
public string Comments { get; set; }
public string DepartureDate { get; set; }
public string ArrivalDate { get; set; }
public List<int> LocationIds { get; set; }
}
...以下动作:
[HttpPost]
public ViewResult SaveRoute(RouteSaveViewModel route)
{
// yada yada
return SomethingShiny();
}
我想用$就或$。员额在数据传递。该表格是多步骤收集用户的数据并提交。我用它来构建位置标识了该代码是这样的:
var routeStopIds = [];
$(".route-stop").each(function(){
routeStopIds.push($(this).attr('data-id'));
});
我已经证实没有我预期的ID是该数组中,通过在浏览器的开发工具和小提琴手。最后,提交数据,我映射出物体正如我在以前的MVC所做的构建:
$.ajax({
type: 'post',
url: postUrl,
data: {
Title: $("#route-title").val(),
Comments: $("#route-description").val(),
DepartureDate: depDate,
ArrivalDate: arrDate,
LocationIds: routeStopIds
},
dataType: 'JSON'
});
我所看到的是,所有数据 - 除了LocationIds
参数是填充。我也尝试将routeStopIds
阵列提交给修改后的SaveRoute
,该修改只接受List<int>
,但似乎并不奏效。无论哪种方式,LocationIds
都为空,尽管请求中的表单参数中存在表单编码值。
{LocationIds%5b%5d=44&LocationIds%5b%5d=4&LocationIds%5b%5d=2}
...,但该HttpValueCollection只是LocationIds[]
,空数组。
那么,我错过了一些明显的东西?也许不那么明显?如何通过模型绑定获取数组?