我有一个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.