加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:44:50 所属栏目:asp.Net 来源:网络整理
导读:我有一个View Model,它由Applicant对象和TeamMember集合组成.当我发布模型时,Team集合始终为null.我已经尝试将我的原始IEnumarable中的集合更改为List但这并没有什么区别.所以我更改了控制器编辑操作以接受FormCollection,并验证了viewModel [“member.First
我有一个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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读