【问题标题】:Foreach on IEnumerable property and CheckBoxFor in ASP.Net MVCASP.Net MVC 中 IEnumerable 属性和 CheckBoxFor 的 Foreach
【发布时间】:2011-01-25 10:58:43
【问题描述】:

我相信这个问题适用于任何“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”的编辑器模板,我的主视图使用它。例如: 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>

有什么建议吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 html-helper


    【解决方案1】:

    我猜你遇到了问题,因为这不起作用

    <%=Html.CheckBoxFor(access) %>
    

    这也没用

    <%=Html.CheckBoxFor(access=>access.HasAccess) %>
    

    但这应该可以工作

    <%=Html.CheckBoxFor(x=>access.HasAccess) %>
    

    【讨论】:

    • 谢谢!这让我的生活更轻松了!
    • 你帮我省了很多苦,朋友。格拉西亚斯。
    【解决方案2】:

    我通过 http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/Steve Sanderson 的博客文章找到了答案

    在我的情况下使用“Html.BeginCollectionItem”。

    我为权限创建了一个 EditorTemplate(在我的示例中)。然后将 Steve 的 BeginCollectionItem 添加到该模板。我按照史蒂夫的博客中的建议使用 Html.RenderPartial 调用了模板。

    我想使用 Html.EditorFor(m => m.item),但这不起作用,因为 item 在 ForEach 中而不是在模型中。在这种情况下可以使用 EditorFor 吗?

    【讨论】:

    • 我真的不明白这个答案,你为什么要经历这些麻烦?
    • 好的,经过更多思考并访问 Steven 的博客,我看到了您想要实现的目标。在这种情况下,史蒂夫的解决方案确实有效。虽然我不认为在这种情况下用户体验有任何好处 - 以这种方式编辑多个项目并将它们全部发布回控制器。
    猜你喜欢
    • 2016-09-13
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多