Controller如何检测View中子实体/行的更改?

时间:2011-04-15 16:54:59

标签: asp.net asp.net-mvc-3

对于以下情况,最合适的方法是什么?

我有两种模式:

  1. 时间表:由四个属性组成:DayStartTimeDayEndTimeBreakTimeList<TimeSheetHours>
  2. TimeSheetHours:由四个属性组成:ClientIdProjectIdHoursWorked
  3. 我的时间表视图强烈输入IEnumerable<TimeSheet>列表。此列表包含7个TimeSheet模型,一个星期日到星期六的每一天。此时间表视图使用编辑器tempate为一周中的每一天生成DayStartTimeDayEndTimeBreakTime的输入字段:

    每天都有一个客户部分和项目。单击“添加”按钮激发ajax函数,该函数调用控制器动作以呈现部分视图,动态地将一行控件(客户端组合框,项目组合框,小时工作文本框)插入适当的客户端&amp;当天的项目部分:

    当我通过ajax调用添加新的客户端/项目行时,我很难理解如何更新每个时间表模型的List<TimeSheetHours>

    所以最后,当我向控制器提交插入时间表时,我生成视图的列表中的每个时间表模型都需要我所需的一切。

    非常感谢任何帮助。

    谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在发布之前按下这些元素的名称,使其看起来像我在下面的方式或在TimeSheet的索引中的ajax调用传递,然后创建名称:< / p>

TimeSheetHours索引= 0

<input type="text" id="TimeSheet[0]_TimeSheetHours[0]_DayStartTime" 
    name="TimeSheet[0].TimeSheetHours[0].DayStartTime" value="1" />
<input type="text" id="TimeSheet[0]_TimeSheetHours[0]_DayEndTime" 
    name="TimeSheet[0].TimeSheetHours[0].DayEndTime" value="2" />
<input type="text" id="TimeSheet[0]_TimeSheetHours[0]_BreakTime" 
    name="TimeSheet[0].TimeSheetHours[0].BreakTime" value="1" />

TimeSheetHours索引= 1

<input type="text" id="TimeSheet[0]_TimeSheetHours[1]_DayStartTime" 
    name="TimeSheet[0].TimeSheetHours[1].DayStartTime" value="3" />
<input type="text" id="TimeSheet[0]_TimeSheetHours[1]_DayEndTime" 
    name="TimeSheet[0].TimeSheetHours[1].DayEndTime" value="4" />
<input type="text" id="TimeSheet[0]_TimeSheetHours[1]_BreakTime" 
    name="TimeSheet[0].TimeSheetHours[1].BreakTime" value="0" />

你可能会更好地拦截submit事件并迭代每个TimeSheetHours html表示的元素并将名称指定为掩码,然后提交表单。这应该允许模型绑定器使用填充的List<TimeSheet>属性重建List<TimeSheetHours>


这是一个很好的教程,介绍如何解决发布集合的问题:ASP.NET MVC 2 Model Binding for a Collection