2011-04-15 53 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

相關問題