C# 集合和枚举前缀相同的MVC 4 Modelbinding-集合为空

C# 集合和枚举前缀相同的MVC 4 Modelbinding-集合为空,c#,asp.net-mvc,asp.net-mvc-4,enums,model-binding,C#,Asp.net Mvc,Asp.net Mvc 4,Enums,Model Binding,我的MVC4项目(它是sitefinity web应用程序的一部分)正确绑定模型时遇到问题。在我将MembershipType枚举引入视图之前,一切都很正常。枚举绑定正确,但成员集合始终为空。仅仅是enum的存在似乎就触发了这个问题。无论我使用文本框、下拉列表还是隐藏输入。注释出枚举后,集合将再次成功绑定。 当Members集合为null时,modelstate是有效的,没有错误,只是没有Members属性的条目。 所有表单值都已发布,并且似乎格式正确 有人知道为什么绑定集合会中断,或者知道如何

我的MVC4项目(它是sitefinity web应用程序的一部分)正确绑定模型时遇到问题。在我将MembershipType枚举引入视图之前,一切都很正常。枚举绑定正确,但成员集合始终为空。仅仅是enum的存在似乎就触发了这个问题。无论我使用文本框、下拉列表还是隐藏输入。注释出枚举后,集合将再次成功绑定。 当Members集合为null时,modelstate是有效的,没有错误,只是没有Members属性的条目。 所有表单值都已发布,并且似乎格式正确

有人知道为什么绑定集合会中断,或者知道如何逐步完成绑定吗?是否有在模型中过帐集合的替代方法

以下是一些代码详细信息:

 public class Membership
    {
        public Guid Id { get; set; }
        public string UrlName { get; set; }
        public string MembershipNumber { get; set; }
        public IList<Member> Members { get; set; }
        public string Company { get; set; }
        public string PostalAddressee { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string PostCode { get; set; }
        public string Country { get; set; }
        public MembershipType MembershipType { get; set; }
        public DateTime ExpiryDate { get; set; }
    }



 public enum MembershipType{
        Single,
        Bonsai,
        ConcessionX2,
        Life,
        Donation,
        ExMember,
        Deceased,
        Association,
        Corporate,
        Concession,
        NotFinancial,
        Household,
        NoCost,
        NonMember
    }

    public class Member
    {
        public Guid Id { get; set; }
        public Guid MembershipId { get; set; }
        public string UrlName { get; set; }

        public string Title { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public bool OptOutOfEmail { get; set; }
}
视图:

@使用(Html.beginformstefinity(“Detail”,“Membership”,FormMethod.Post,new{Id=“editMemberForm”,role=“form”}))
{
foreach(Model.Members中的var成员)
{
int i=0;
@member.Title@member.FirstName@member.LastName
标题:
@Html.TextBox(“Members[”+i.ToString()+“].Title”,@Model.Members[i].Title)
名字:
@Html.TextBox(“Members[”+i.ToString()+“].FirstName”,@Model.Members[i].FirstName)
姓氏:
@Html.TextBox(“Members[”+i.ToString()+“].LastName”,@Model.Members[i].LastName)
电邮:
@Html.TextBox(“Members[”+i.ToString()+“].Email”,@Model.Members[i].Email)
选择退出电子邮件:
@Html.CheckBox(“Members[“+i.ToString()+”].OptOutOfEmail”,@Model.Members[i].OptOutOfEmail)
创始成员:
@Html.CheckBox(“Members[“+i.ToString()+”].FoundingMember”,@Model.Members[i].FoundingMember)
理事会成员:
@Html.CheckBox(“Members[”+i.ToString()+“].councileMember”,@Model.Members[i].councileMember)
训练有素的植物园指南:
@复选框(“成员[“+i.ToString()+”].TrainedArboretumGuide”,@Model.Members[i].TrainedArboretumGuide)
盆景指南:
@Html.CheckBox(“Members[“+i.ToString()+”].BonsaiGuide”,@Model.Members[i].BonsaiGuide)
弱势群体人数:
@Html.TextBox(“Members[“+i.ToString()+”].VulnerablePeopleNumber”,@Model.Members[i].VulnerablePeopleNumber)
VPN有效期:
@Html.TextBox(“Members[“+i.ToString()+”].VulnerablePeopleExpirement”,(Model.Members[i].VulnerablePeopleExpirement==null)?:((DateTime)Model.Members[i].VulnerablePeopleExpirement).ToString(“dd/MMM/yyyyy”),new{@class=“vpnExp”})
@Html.Hidden(“Members[”+i.ToString()+“].Id”,@Model.Members[i].Id)
}
到期日:
@TextBoxFor(m=>m.ExpiryDate,新的{Value=Model.ExpiryDate.ToString(“dd/MMM/yyyy”)})
会员编号:
@Html.TextBoxFor(m=>m.MembershipNumber)
@*
会员类型:
@DropDownList(“MembershipType”,新选择列表(Enum.GetValues(typeof(SitefinityWebApp.MembershipType)).Cast())
*@
@*@HiddenFor(m=>m.MembershipType)*@

因此,这实际上是asp.net MVC 4中DefaultModelBinder中的一个错误。将找不到名称为同一类中字段名称前缀的集合。更多详细信息如下:

我改变了主意

IList<Member> Members
IList成员

IList人

一切都很好。

好的,我正在尝试使用这个问题中的方法逐步完成:
@using (Html.BeginFormSitefinity("Detail", "Membership", FormMethod.Post, new { Id = "editMemberForm", role = "form" }))
{
    foreach (var member in Model.Members)
    {
        int i = 0;
        <h1>@member.Title @member.FirstName @member.LastName</h1>

        <label>
            Title:
            @Html.TextBox("Members[" + i.ToString() + "].Title", @Model.Members[i].Title)
        </label>

        <label>
            First Name:
            @Html.TextBox("Members[" + i.ToString() + "].FirstName", @Model.Members[i].FirstName)
        </label>

        <label>
            Last Name:
            @Html.TextBox("Members[" + i.ToString() + "].LastName", @Model.Members[i].LastName)
        </label>
        <label>
            Email:
            @Html.TextBox("Members[" + i.ToString() + "].Email", @Model.Members[i].Email)
        </label>
        <label>
            Opt out of Email:
            @Html.CheckBox("Members[" + i.ToString() + "].OptOutOfEmail", @Model.Members[i].OptOutOfEmail)
        </label>
        <label>
            Founding Member:
            @Html.CheckBox("Members[" + i.ToString() + "].FoundingMember", @Model.Members[i].FoundingMember)
        </label>
        <label>
            Council Member:
            @Html.CheckBox("Members[" + i.ToString() + "].CouncilMember", @Model.Members[i].CouncilMember)
        </label>
        <label>
            Trained Arboretum Guide:
            @Html.CheckBox("Members[" + i.ToString() + "].TrainedArboretumGuide", @Model.Members[i].TrainedArboretumGuide)
        </label>
        <label>
            Bonsai Guide:
            @Html.CheckBox("Members[" + i.ToString() + "].BonsaiGuide", @Model.Members[i].BonsaiGuide)
        </label>
        <label>
            Vulnerable People Number:
            @Html.TextBox("Members[" + i.ToString() + "].VulnerablePeopleNumber", @Model.Members[i].VulnerablePeopleNumber)
        </label>
        <label>
            VPN Expiry Date:
            @Html.TextBox("Members[" + i.ToString() + "].VulnerablePeopleExpiry", (Model.Members[i].VulnerablePeopleExpiry == null) ? "" : ((DateTime)Model.Members[i].VulnerablePeopleExpiry).ToString("dd/MMM/yyyy"), new { @class = "vpnExp" })
        </label>
        @Html.Hidden("Members[" + i.ToString() + "].Id", @Model.Members[i].Id)
    }
    <label>
        Expiry Date:
        @Html.TextBoxFor(m => m.ExpiryDate, new { Value = Model.ExpiryDate.ToString("dd/MMM/yyyy") })
    </label>

    <label>
        Membership Number:
        @Html.TextBoxFor(m => m.MembershipNumber)
    </label>
    @*<label>
        Membership Type:
        @Html.DropDownList("MembershipType", new SelectList(Enum.GetValues(typeof(SitefinityWebApp.MembershipType)).Cast<SitefinityWebApp.MembershipType>()))
    </label>*@
    @*@Html.HiddenFor(m => m.MembershipType);*@
    <input type="submit" />
IList<Member> Members
IList<Member> People