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.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....