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

问题描述:

在我的ASP.NET MVC网站中,功能的一部分允许用户输入某个场地打开时的小时数。ASP.NET MVC模型绑定到列表中

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

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


我的问题涉及到如何将此信息传递给我的HttpPost控制器操作。我知道可以在(7)中传递的最大天数,我当然可以在我的Action中写入7个可以为空的VenueHour参数,但我相信有更好的方法。

我能不知何故将视图信息绑定到传递给我的操作的列表中?这也将帮助我,如果我碰到的情况下,用户可以填写多少信息没有限制。

Scott Hanselman发布了一个very good article关于默认模型绑定器如何处理集合,数组和字典。如果您不想编写自定义模型绑定器,这很好,但编写自定义模型绑定器并不是什么大不了的事情。

+0

太棒了!将尝试使用此。 – 2010-06-17 03:41:08

+0

另外,是否可以使用[Bind(Exclude =“...”)]]属性不绑定列表中每个对象内的一些参数? – 2010-06-17 03:42:14

请尝试以下步骤

1 - 在ASPX视图一个div内将所有的输入框(其可通过的DatePicker JQuery的控制来填充)

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

请参阅Filtering input elements inside DIV

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

3 - 使用jQuery的岗位到enteredVenueHours发送回控制器动作**

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

4 - 确保控制器的操作方法具有以下签名

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