Asp.net-Mvc

ASP.Net MVC 中 IEnumerable 屬性和 CheckBoxFor 的 Foreach

  • December 20, 2010

我相信這個問題適用於任何“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 中,我想要這樣的程式碼:

&lt;table&gt;
 &lt;% foreach(rights access in Model)
 { &#37;&gt;
     &lt;tr&gt;
       &lt;td&gt;
           &lt;%=Html.CheckBoxFor( access ) %&gt;
       &lt;/td&gt;
       &lt;td&gt;
           &lt;%=access.Description %&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
 &lt;% } %&gt;
&lt;/table&gt;

我知道 CheckBoxFor 行不起作用,但我想做一些產生相同結果的事情,就好像 access 是模型上的一個屬性一樣。

在上面的範例中,我希望所有內容都在發佈時自動綁定。

我試過用與此類似的程式碼偽造 CheckBox,但它不會自動綁定:

&lt;table&gt;
 &lt;% for(int i=0; i &lt; Model.Count(); i++)
 { &#37;&gt;
     &lt;tr&gt;
       &lt;td&gt;
           &lt;%=Html.CheckBox(string.Format("[{0}].HasAccess",i), Model.ElementAt(i).HasAccess)%&gt;
       &lt;/td&gt;
       &lt;td&gt;
           &lt;%=access.Description %&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
 &lt;% } %&gt;
&lt;/table&gt;

有什麼建議麼?

我通過使用 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 嗎?

我猜你有問題,因為這不起作用

&lt;%=Html.CheckBoxFor(access) %&gt;

這也不起作用

&lt;%=Html.CheckBoxFor(access=&gt;access.HasAccess) %&gt;

但這應該有效

&lt;%=Html.CheckBoxFor(x=&gt;access.HasAccess) %&gt;

引用自:https://stackoverflow.com/questions/2409552