我目前使用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个属性,对我来说定义太多了。
感谢帮助我
答案 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" })