ASP.NET MVC模型绑定到列表中

在我的ASP.NET MVC站点中,function的一部分允许用户输入某个场所打开时的小时数。

我决定将这些小时存储在我的数据库中的VenueHours表中,与Venues表的FK-PK关系,以及DayOfWeek,OpeningTime和ClosingTime参数。

在我的视图中,我想让用户只输入他们所知道的时间; 换句话说,有些日子可能没有为场地填写。 我正在考虑创建一个复选框,用户可以检查该复选框以启用复选框所属的DayOfWeek的OpeningTime和ClosingTime字段。


我的问题涉及如何将此信息传递给我的HttpPost控制器操作

我知道可以传递的最大天数(7),我当然可以在我的Action中编写7个可以为空的VenueHour参数,但我确信有更好的方法。

我可以以某种方式将视图信息绑定到传递给我的Action的List吗? 如果我遇到用户可以填写的信息数量没有限制的情况,这也将对我有所帮助。

Scott Hanselman发表了一篇非常好的文章,讲述了默认模型绑定器如何处理集合,数组和字典。 如果您不想编写自定义模型绑定器,那就太棒了,尽管编写自定义模型绑定器并不是什么大问题。

请尝试以下步骤

1 – 将所有输入框(可以由DatePicker JQuery控件填充) 放在 aspx视图中的div内

2 – 使用Jquery选择器将需要发布到Action方法的所有值(在上面指定的DIV中)捕获到客户端的JavaScript数组中。

请参阅DIV中的过滤输入元素

var enteredVenueHours = new Array(); for(var i=0;i < inputsInsideDiv.length;i++) { // add the elements to the JS array } 

3 - 使用Jquerypost将enteredVenueHours发送回控制器操作**

 $.post('<%=Url.Action("ActionMethod")%>',{ EnteredVenueHours: enteredVenueHours,function (data) { // Udpate status to be displayed here. }); 

4 - 确保Controller操作方法具有以下签名

 [AcceptVerbs(HTTP.Post)] public ActionResult ActionMethod(List EnteredVenueHours) { // Have the DB persistance logic . }