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

5
在我的ASP.NET MVC网站中,某个功能允许用户输入场馆开放时间。我决定将这些时间存储在我的数据库的VenueHours表中,并与Venues表建立外键关系,以及DayOfWeek、OpeningTime和ClosingTime参数。在我的视图中,我想允许用户仅输入他们知道的时间; 换句话说,对于某个场馆来说,某些天可能没有填写。我考虑创建复选框,用户可以选中以启用其所属的DayOfWeek的OpeningTime和ClosingTime字段。我的问题与如何将此信息传递给我的HttpPost Controller Action有关。由于我知道可以传递的最大天数为7天,因此我当然可以将7个可空的VenueHour参数编写到我的Action中,但我相信还有更好的方法。我是否可以将视图信息绑定到传递给我的Action的List中?如果遇到用户可以填写任意数量信息的情况,这也会对我有所帮助。
2个回答

13

Scott Hanselman发表了一篇非常好的文章,介绍了默认模型绑定器如何处理集合、数组和字典。如果您不想编写自定义模型绑定器,这篇文章很棒,尽管编写自定义模型绑定器并不是什么大事。


另外,是否可以使用[Bind(Exclude="...")]属性来不绑定列表中每个对象内的某些参数? - Maxim Zaslavsky

1
请尝试以下步骤:
1- 在aspx视图中,将所有可以由DatePicker JQuery控件填充的输入框放置在一个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 - 使用Jquery post将输入的场馆小时数发送回控制器操作**

$.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 .
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接