模型绑定fof列表

时间:2015-07-30 13:00:13

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我目前使用ViewModel来显示DropDown项目,这要归功于我用来填充下拉菜单(专业选择)。值存储在列表中(专业)。

以下是DocumentViewModel的示例:

[Required]
public List<Profession> professions { get; set; }
public IEnumerable<SelectListItem> professionsSelect { get; set; }

此处的职业模特示例:

public class Profession
{
    public int id { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public bool isActive { get; set; }
}

现在,例如,要将数据插入数据库,我使用的模型对应于模型。我使用Mapper将VM转换为Model:

Mapper.CreateMap<DocumentViewModel, BE.Document>();
                IList<BE.Document> destination = Mapper.Map<IList<BE.Document>>(document);

但问题是当我在控制器上接收VM时,目标列表中没有数据:

[HttpPost]
        public ActionResult Create(DocumentViewModel model)
        {
            if (ModelState.IsValid)
            {...}
}

模型如何通过填充ViewModel的List IList来填充?

以下是在创建表单上显示用户数据的方法:

<div class="form-group">
            @Html.LabelFor(model => model.professions, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.ListBoxFor(model => model.professions, Model.professionsSelect, new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.professions, "", new { @class = "text-danger" })
            </div>
        </div>

一个可能的解决方案应该是为viewModel int [] ProfessionIds创建一个新属性,但目前还不清楚,一个fidls的3个属性,对我来说定义太多了。

感谢帮助我

1 个答案:

答案 0 :(得分:1)

您无法将<select multiple>绑定到复杂对象的集合(在您的情况下为Profession)。它只回发一组值类型(所选选项的值)。

您的模型需要一个属性(比如说)

public int[] SelectedProfessions { get; set; } // or List<int>

假设您想要回发Profession.id

的集合

然后视图将是

@Html.ListBoxFor(m => m.SelectedProfessions, Model.professionsSelect, new { @class = "form-control" })