MVC 中的绑定集合

2023-12-01

我有一个视图模型,其中包含Applicant对象和一个TeamMember收藏。当我将模型发回时,团队集合始终为空。我尝试过更改原始集合IEnumarable to a 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              
}

View

<% 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>
    <% } %>

我相信与集合中的项目关联的输入标签(当模型本身不是集合​​时)需要在名称属性中具有索引,然后才能将发布的数据绑定到视图模型。这是我通常完成此任务的方法......

<% 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) 就该主题发表了讲话。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 中的绑定集合 的相关文章

随机推荐