ASP.Net MVC 中 IEnumerable 屬性和 CheckBoxFor 的 Foreach
我相信這個問題適用於任何“For”Html 助手,但我的具體問題是使用 CheckBoxFor …
我有一個 IEnumerable 類型的模型,其中權限是一個簡單的 POCO。這個模型實際上是一個更大的模型的一個屬性,我為它創建了一個 EditorTemplate。這是我的模型的大圖:
public class bigmodel { public string Title {get; set;} public string Description {get; set;} [UIHint("ListRights")] public IEnumerable<rights> Rights {get;set;} } public class rights { public bool HasAccess {get; set;} public string Description {get;set;} }我創建了一個名為“ListRights”的編輯器模板,我的主視圖使用它。例如:<%=Html.EditorFor(m => m.Rights) %>。
在 ListRights.ascx 中,我想要這樣的程式碼:
<table> <% foreach(rights access in Model) { %> <tr> <td> <%=Html.CheckBoxFor( access ) %> </td> <td> <%=access.Description %> </td> </tr> <% } %> </table>我知道 CheckBoxFor 行不起作用,但我想做一些產生相同結果的事情,就好像 access 是模型上的一個屬性一樣。
在上面的範例中,我希望所有內容都在發佈時自動綁定。
我試過用與此類似的程式碼偽造 CheckBox,但它不會自動綁定:
<table> <% for(int i=0; i < Model.Count(); i++) { %> <tr> <td> <%=Html.CheckBox(string.Format("[{0}].HasAccess",i), Model.ElementAt(i).HasAccess)%> </td> <td> <%=access.Description %> </td> </tr> <% } %> </table>有什麼建議麼?
我通過使用 Steve Sanderson 在http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/上的部落格文章找到了答案
在我的情況下使用“Html.BeginCollectionItem”。
我為權限創建了一個 EditorTemplate(在我的範例中)。然後將 Steve 的 BeginCollectionItem 添加到該模板。我按照史蒂夫的部落格中的建議使用 Html.RenderPartial 呼叫模板。
我想使用 Html.EditorFor(m => m.item),但這不起作用,因為 item 在 ForEach 中而不是在模型中。在這種情況下可以使用 EditorFor 嗎?
我猜你有問題,因為這不起作用
<%=Html.CheckBoxFor(access) %>這也不起作用
<%=Html.CheckBoxFor(access=>access.HasAccess) %>但這應該有效
<%=Html.CheckBoxFor(x=>access.HasAccess) %>