2011-04-15 48 views
2

什么是以下方案最适合的方法?Controller如何检测View中子实体/行的更改?

我有两个型号:

  1. 的TimeSheet:DayStartTimeDayEndTimeBreakTimeList<TimeSheetHours>
  2. TimeSheetHours:的四个属性由......组成ClientIdProjectIdHoursWorked

:的四个属性由......组成我的时间表视图强制键入IEnumerable<TimeSheet>列表。此列表包含7个TimeSheet模型,每周一到周六的每一天都有一个模型。这一次表视图中使用编辑器tempate产生输入字段DayStartTimeDayEndTimeBreakTime,为每个星期的日子:

每一天包含客户&项目的部分。点击“添加”按钮触发它调用一个控制器的动作来呈现的部分视图动态地插入的控制(客户组合框,项目组合框,HoursWorked文本框)的行到适当的客户机进行的那一天&项目截面的AJAX功能:

当我通过ajax调用添加新的客户端/项目行时,我很难理解如何更新每个时间表模型的List<TimeSheetHours>。因此,最后,当我向控制器提交插入时间表时,我已经为列表中的每个时间表模型提供了所需的所有事情。

任何援助将不胜感激。

谢谢!

+0

看看我的回答,应该做的伎俩。 – hunter 2011-04-15 18:42:47

回答

0

你将不得不按摩这些元素的名称,他们张贴的样子我怎么有它下方或在你的Ajax调用传中TimeSheet的索引,然后创建名前:

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" /> 

你大概是多少BETT呃拦截submit事件并遍历每个TimeSheetHours html表示的元素并将该名称作为掩码并提交表单。这应该允许模型联编程序使用已填充的List<TimeSheetHours>属性重建您的List<TimeSheet>


这里有一个关于如何解决张贴收集的这个问题一个很好的教程:ASP.NET MVC 2 Model Binding for a Collection

+0

你好,猎人。感谢您的回复。以上三个领域实际上不是问题。它是TimeSheetHour字段:ClientId,ProjectId和HoursWorked。这些字段通过部分页面添加。我已经做了一些字段名覆盖,以获得与您上面指出的类似格式的名称。 – Cbs927 2011-04-15 19:34:33

相关问题