C#MVC从视图中获取模型列表

C#MVC从视图中获取模型列表,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个模型列表,显示在表单中的视图中。这样就可以了,但是如果我点击save,我得到了模型,但是列表是空的。有人有主意吗 视图: @model AdminFeatureSetsModel @{ Layout=“~/Views/Shared/_AdministrationLayout.cshtml”; } @节头 { 编辑要素设置 } @使用(Html.BeginForm(“Save”、“adminfeatureset”、FormMethod.Post、new{id=“EditFeatureS

我有一个模型列表,显示在表单中的视图中。这样就可以了,但是如果我点击save,我得到了模型,但是列表是空的。有人有主意吗

视图:

@model AdminFeatureSetsModel
@{
Layout=“~/Views/Shared/_AdministrationLayout.cshtml”;
}
@节头
{
编辑要素设置


} @使用(Html.BeginForm(“Save”、“adminfeatureset”、FormMethod.Post、new{id=“EditFeatureSet”、name=“EditFeatureSet”、@class=“form horizontal”})) { 功能名称 启用 验证 由用户启用 由组织启用

@对于(int i=0;iModel.featureset[i].Enabled,新的{@class=“form control”,@id=“EditEnable”}) @Html.TextBoxFor(m=>Model.featureset[i].Verify,新{@class=“form control”,@id=“EditVerify”}) @Html.TextBoxFor(m=>Model.FeatureSets[i].enabledbyser,新{@class=“form control”,@id=“EditEnableByUser”}) @Html.TextBoxFor(m=>Model.featureset[i].enabledbyorganization,新{@class=“form control”,@id=“EditEnableByOrganization”})

} 其他的 { @Model.featureset[i].Name 不在数据库中

} } 拯救 }
控制器: 在由foreach(model.featureset)保存的函数中,featureset(List)始终为空

public ActionResult Index()
        {
            AdminFeatureSetsModel modelFeatureSets = new AdminFeatureSetsModel();
            modelFeatureSets.FeatureSets = new List<FeatureSetModel>();
            var featureInDB = DbContext.GetAllEntitiesQueryable<Feature>();

            var clazz = typeof(FeatureSet);
            foreach (var property in clazz.GetProperties())
            {
                FeatureSetModel modelFeatureSet = new FeatureSetModel();
                var feature = featureInDB.FirstOrDefault(f => f.Name == property.Name);
                if (feature != null)
                {
                    modelFeatureSet.Name = feature.Name;
                    modelFeatureSet.Enabled = feature.Enabled;
                    modelFeatureSet.Verify = feature.Verify;
                    modelFeatureSet.EnabledByUser = feature.EnableByUser;
                    modelFeatureSet.EnabledByOrganisation = feature.EnableByOrganization;
                    modelFeatureSet.IsFeatureInDB = true;
                }else
                {
                    modelFeatureSet.Name = property.Name;
                    modelFeatureSet.IsFeatureInDB = false;
                }
                modelFeatureSets.FeatureSets.Add(modelFeatureSet);             

            }
            return View(modelFeatureSets);   
        }

        public ActionResult Save(AdminFeatureSetsModel model)
        {

            var featureInDB = DbContext.GetAllEntitiesQueryable<Feature>();
            foreach (var featureSet in model.FeatureSets) // here the FeatureSet of the model is always empty
            {
                if (featureSet.IsFeatureInDB == true)
                {
                    var feature = featureInDB.FirstOrDefault(f => f.Name == featureSet.Name);
                    feature.Enabled = featureSet.Enabled;
                    feature.Verify = featureSet.Verify;
                    feature.EnableByUser = featureSet.EnabledByUser;
                    feature.EnableByOrganization = featureSet.EnabledByOrganisation;
                }
            }
            DbContext.SaveChanges();
            return RedirectToAction("Index", "AdminFeatureSet");
        }
public ActionResult Index()
{
AdminFeatureSetModel modelFeatureSets=新的AdminFeatureSetModel();
modelFeatureSets.FeatureSets=新列表();
var featureInDB=DbContext.getAllentiesQueryable();
var clazz=类型(特征集);
foreach(clazz.GetProperties()中的var属性)
{
FeatureSetModel modelFeatureSet=新FeatureSetModel();
var feature=featureInDB.FirstOrDefault(f=>f.Name==property.Name);
如果(功能!=null)
{
modelFeatureSet.Name=feature.Name;
modelFeatureSet.Enabled=功能.Enabled;
modelFeatureSet.Verify=特征.Verify;
modelFeatureSet.EnabledByUser=feature.EnableByUser;
modelFeatureSet.EnabledByOrganization=feature.EnableByOrganization;
modelFeatureSet.IsFeatureInDB=true;
}否则
{
modelFeatureSet.Name=property.Name;
modelFeatureSet.IsFeatureInDB=false;
}
modelFeatureSet.FeatureSet.Add(modelFeatureSet);
}
返回视图(模型特征集);
}
公共操作结果保存(AdminFeatureSetsModel模型)
{
var featureInDB=DbContext.getAllentiesQueryable();
foreach(model.featureSet中的var featureSet)//这里模型的featureSet总是空的
{
如果(featureSet.IsFeatureInDB==true)
{
var feature=featureInDB.FirstOrDefault(f=>f.Name==featureSet.Name);
feature.Enabled=featureSet.Enabled;
feature.Verify=featureSet.Verify;
feature.EnableByUser=featureSet.EnabledByUser;
feature.EnableByOrganization=featureSet.EnableByOrganization;
}
}
DbContext.SaveChanges();
返回重定向到操作(“索引”、“AdminFeatureSet”);
}
具有列表的模型:

public class AdminFeatureSetsModel :AdminBaseModel
    {
        public List<FeatureSetModel> FeatureSets { get; set; }    
    }
公共类AdminFeatureSetsModel:AdminBaseModel { 公共列表功能集{get;set;} } 模型特征集:

public class FeatureSetModel : AdminBaseModel
    {
        public string Name { get; set; }

        public bool Enabled { get; set; }
        public bool Verify { get; set; }
        public bool EnabledByUser { get; set; }
        public bool EnabledByOrganisation { get; set; }

        public bool IsFeatureInDB { get; set; }

        public List<User> EnabledUserList { get;set;}
        public List<Organization> EnabledOrginaizationList { get; set; }

    }
公共类功能集模型:AdminBaseModel
{
公共字符串名称{get;set;}
已启用公共bool的{get;set;}
公共bool验证{get;set;}
public bool EnabledByUser{get;set;}
公共bool enabledbyorganization{get;set;}
公共bool IsFeatureInDB{get;set;}
public List EnabledUserList{get;set;}
public List EnabledOrginaizationList{get;set;}
}


编辑

@Html.HiddenFor(m=>m.featureset[i].IsFeatureInDB)
if(Model.FeatureSets[i].IsFeatureInDB==true)
{
@**@ 
@Model.featureset[i].Name
@Html.CheckBoxFor(m=>Model.featureset[i].Enabled)
@Html.CheckBoxFor(m=>Model.featureset[i].Verify)
@Html.CheckBoxFor(m=>Model.featureset[i].EnabledByUser)
@(m=>Model.featureset[i].enabledbyorganization)


} 其他的 { @Model.featureset[i].Name @Html.HiddenFor(m=>m.featureset[i].Enabled) @Html.Hid
public class FeatureSetModel : AdminBaseModel
    {
        public string Name { get; set; }

        public bool Enabled { get; set; }
        public bool Verify { get; set; }
        public bool EnabledByUser { get; set; }
        public bool EnabledByOrganisation { get; set; }

        public bool IsFeatureInDB { get; set; }

        public List<User> EnabledUserList { get;set;}
        public List<Organization> EnabledOrginaizationList { get; set; }

    }
     @Html.HiddenFor(m => m.FeatureSets[i].IsFeatureInDB)
                if (Model.FeatureSets[i].IsFeatureInDB == true)
                {
                    @*<input type="hidden" name="FeatureSets.Index" value="@i" />*@ 
                    <div class="col-sm-2">
                        <b> @Model.FeatureSets[i].Name</b>
                    </div>
                    <div class="col-sm-2">
                        @Html.CheckBoxFor(m => Model.FeatureSets[i].Enabled)
                    </div>
                    <div class="col-sm-2">
                        @Html.CheckBoxFor(m => Model.FeatureSets[i].Verify)
                    </div>
                    <div class="col-sm-2">
                        @Html.CheckBoxFor(m => Model.FeatureSets[i].EnabledByUser)
                    </div>
                    <div class="col-sm-2">
                        @Html.CheckBoxFor(m => Model.FeatureSets[i].EnabledByOrganisation)
                    </div>
                    <br />
                    <br />
                }
                else
                {
                    @Model.FeatureSets[i].Name
                    @Html.HiddenFor(m => m.FeatureSets[i].Enabled)
                    @Html.HiddenFor(m => m.FeatureSets[i].Verify)
                    @Html.HiddenFor(m => m.FeatureSets[i].EnabledByUser)
                    @Html.HiddenFor(m => m.FeatureSets[i].EnabledByOrganisation)
}
if (Model.FeatureSets[i].IsFeatureInDB == true)
@for (int i = 0; i < Model.FeatureSets.Count; i++)
{
    @Html.HiddenFor(m => m[i].IsFeatureInDB ) // add this so its value posts back
    if (Model.FeatureSets[i].IsFeatureInDB == true)
    {
        @Model.FeatureSets[i].Name
        @Html.TextBoxFor(m => m[i].Enabled, new { @class = "form-control" }) // remove id attribute
        ....
    }
    else
    {
        @Model.FeatureSets[i].Name</b>
        @Html.HiddenFor(m => m[i].Enabled) // add hidden inputs
        ....
    }
if (Model.FeatureSets[i].IsFeatureInDB == true)
{
    <input type="hidden" name="FeatureSets.Index" value="@i" /> // add this
    <div class="col-sm-2">
        <b> @Model.FeatureSets[i].Name</b>
    </div>
    <div class="col-sm-2">
        @Html.TextBoxFor(m => Model.FeatureSets[i].Enabled, new { @class = "form-control" }) // remove the invalid id attributes
    </div>