昨晚我试图整理一些自 MVC2 以来一直在工作的东西。
给定以下课程:
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();
}
我想使用 $.ajax 或 $.post 传递数据。该表单需要多个步骤来收集用户的数据并提交。我用来构建位置 ID 的代码是这样的:
var routeStopIds = [];
$(".route-stop").each(function(){
routeStopIds.push($(this).attr('data-id'));
});
我已经通过浏览器内的开发工具和 fiddler 验证了我期望的 id 位于该数组中。最后,为了提交数据,我将像在之前的 MVC 构建中所做的那样映射对象:
$.ajax({
type: 'post',
url: postUrl,
data: {
Title: $("#route-title").val(),
Comments: $("#route-description").val(),
DepartureDate: depDate,
ArrivalDate: arrDate,
LocationIds: routeStopIds
},
dataType: 'JSON'
});
我看到的是all数据 - 除了LocationIds
参数已填充。我也尝试过只提交routeStopIds
数组修改为SaveRoute
只接受一个List<int>
这似乎也不起作用。无论哪种方式,LocationIds
为 null,尽管请求的表单参数中有一个表单编码值。
{LocationIds%5b%5d=44&LocationIds%5b%5d=4&LocationIds%5b%5d=2}
...然而 HttpValueCollection 只是LocationIds[]
,一个空数组。
那么,我是否遗漏了一些明显的东西?也许不那么明显?如何让模型绑定拾取数组?