控制器代碼:MVC 2-更新模型數據時模型是IEnumerable類型的/ IQueryable的
Function ManagePages() As ActionResult
Dim pages = contentRepository.GetAllContentPagesByType("Content Page", False)
Return View("ManagePages", pages)
End Function
<HttpPost()> _
Function ManagePages(ByVal values As FormCollection) As ActionResult
Dim pages = contentRepository.GetAllContentPagesByType("Content Page", False)
''' **** HOW DO I UPDATE THE MODEL HERE ****
contentRepository.Save() 'Simply calls SubmitChanges()
Return View("ManagePages", pages)
End Function
GetAllContentPagesByType返回一個IQueryable - 一個LINQ到SQL查詢的結果。視圖是強類型:
Inherits="System.Web.Mvc.ViewPage(Of IQueryable (Of DBContent))"
我通過每個DBContent對象的視圖中的循環和幾個屬性創建文本框和其他輸入 - 基本上我爲顯示模型中的每個記錄的編輯。這工作正常。
現在,我已經嘗試了許多不同的方式來得到這個更新:
- 調用的UpdateModel(),然後 的SubmitChanges()在LINQ數據 背景 - 什麼也沒做。
- 隨後菲爾 哈克的「綁定到列表」教程, 但它並沒有深入去儘可能 更新模型: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
- 參數類型的二手變化 到HttpPost爲ManagePages到 沒有無濟於事。
我現在想想得到它的唯一方法是循環遍歷FormCollection參數中的所有項目,並手動更新集合中的每個DBContent記錄,但這看起來不像最佳實踐解決方案。
問題是 - 這種情況下更新任何枚舉類型模型的黃金標準最佳實踐是什麼?
編輯
如果有幫助,這裏的視圖代碼片段。請注意,使用Html.TextBox等,似乎不會影響結果表單數據。我總是得到4個表單鍵,用逗號分隔值(基本上每個屬性都有一個)。我試着與記錄ID(唯一鍵)前面加上這些,但的UpdateModel()仍然無法正常工作,但我得到的每個輸入控制形成了獨特的價值:
<% Using Html.BeginForm%>
<% For Each item In Model.OrderBy(Function(c) c.DisplayOrder)%>
<%: Html.Hidden("ContentId", Model.ContentId.ToString())%>
<tr>
<td class="first"><input name='Enabled' type="checkbox" checked='<%: If(Model.Enabled, "checked", "")%>' /></td>
<td class="first"><input name='DisplayOrder' type="text" value='<%: Model.DisplayOrder %>' style="width:40px" /></td>
<td class="first"><select name='ContentLevel'>
<option value="100" selected='<%: If(Model.ContentLevel = 100, "selected", "") %>'>Admin</option>
<option value="50" selected='<%: If(Model.ContentLevel = 50, "selected", "") %>'>Board</option>
<option value="25" selected='<%: If(Model.ContentLevel = 25, "selected", "") %>'>Member</option>
<option value="0" selected='<%: If(Model.ContentLevel = 0, "selected", "") %>'>Everyone</option>
</select></td>
<td><a href="EditPage/<%: Model.ContentId %>"><%: Model.PageTitle%></a></td>
<td><%: Model.aspnet_User.UserName%></td>
<td class="last"><%: Model.ModifiedOn%></td>
</tr>
<% Next%>
<% End Using%>
如果我理解正確,真正的問題是你似乎想要更新視圖中的數據?該視圖只能輸出HTML和相關內容。如果您希望更改保持不變,則需要向服務器發回請求以應用更改的值的操作。 – 2010-12-15 17:39:41
該視圖有一個簡單的提交按鈕:'' - 點擊此按鈕將觸發 ManagePages(formCollection)方法。在這個方法中,我們傳統上會爲大多數對象調用UpdateModel(),但是需要明顯地處理不同的列表。 –
Keith
2010-12-15 17:44:02
啊,沒關係,對不起,我錯過了你的問題中的那一部分。 – 2010-12-15 17:47:30