微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc – MVC中的绑定集合

我有一个View Model,它由Applicant对象和TeamMember集合组成.当我发布模型时,Team集合始终为null.我已经尝试将我的原始IEnumarable中的集合更改为List但这并没有什么区别.所以我更改了控制器编辑操作以接受FormCollection,并验证了viewmodel [“member.FirstName”]中有数据.我迷失了为什么绑定不起作用.我试图尽可能地清理我的代码示例,但我对我所缺少的内容感到困惑.任何帮助是极大的赞赏!

查看模型属性

public class Myviewmodel
{
    public Applicant ApplicantInfo { get; set; }
    public List<TeamMember> TeamMembers { get; set; }
}

调节器

[HttpPost]
public ActionResult Edit(Myviewmodel viewmodel)
{
         //  viewmodel.ApplicantInfo has the form data
         //  viewmodel.TeamMembers = null              
}

视图

<% using (Html.BeginForm())
       {%>
    <h3>
    <a href="#">Applicant information</a>
    </h3>
    <label>
        City
        <%: Html.TextBoxFor(m => Model.ApplicantInfo.City)%>
    </label>
    <label>
        State
        <%: Html.TextBoxFor(m => Model.ApplicantInfo.State)%>
    </label>

    <h3>
    <a href="#">Team</a>
    </h3>
    <div>
    <% foreach (var member in Model.TeamMembers)
    { %>           
    <div class="editor-field">
        <%: Html.DropDownList("member.Type",Model.GetMemberTypes(member.MemberType.TypeId))%>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(m => member.FirstName)%>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(m => member.LastName)%>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(m => member.Title)%>
    </div>            
    <%} %>
    </div>
    <p>
        <input type="submit" value="Save" />
    </p>
    <% } %>

解决方法

我相信与集合中的项相关联的输入标记(当模型本身不是集合​​时)需要在name属性中具有索引,然后才能将发布的数据绑定到视图模型.这是我通常做到这一点的方式……

<% for (int i=0; i<Model.TeamMembers.Count; i++) { %>
<div class="editor-field">
  <%: Html.EditorFor(m => m.TeamMembers[i].FirstName)%>
</div>
<div class="editor-field">
  <%: Html.EditorFor(m => m.TeamMembers[i].LastName)%>
</div>
<% } %>

我也使用了Shea建议的模板,但我有更多的代码试图强制它渲染括号/索引.

<% foreach (var member in Model.TeamMembers) { %>
  <%: Html.EditorFor(x => 
    member,"TeamMember","TeamMembers["+(member.Number-1)+"]",new { MemberTypes = Model.GetMemberTypes(member.MemberType.TypeId) })%>
<% } %>

这是来自Phil Haack关于这个主题old but still relevant article.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐