【问题标题】:ASP.NET MVC Model Binding into a ListASP.NET MVC 模型绑定到列表中
【发布时间】:2011-03-04 18:30:31
【问题描述】:

在我的 ASP.NET MVC 站点中,部分功能允许用户输入某个场所的营业时间。

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

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


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

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

我能否以某种方式将视图信息绑定到传递给我的操作的列表中?如果我遇到用户可以填写的信息数量没有限制的情况,这也会对我有所帮助。

【问题讨论】:

    标签: c# asp.net asp.net-mvc data-binding modelbinders


    【解决方案1】:

    Scott Hanselman 发布了very good article,介绍了默认模型绑定器如何处理集合、数组和字典。如果您不想编写自定义模型绑定器,那就太好了,尽管编写自定义模型绑定器没什么大不了的。

    【讨论】:

    • 另外,是否可以使用 [Bind(Exclude="...")] 属性不绑定 List 中每个对象内的某些参数?
    【解决方案2】:

    请尝试以下步骤

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

    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 帖子将输入的VenueHours 发送回控制器操作**

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

    【讨论】:

      猜你喜欢
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多