我在编辑模型时遇到问题,该模型集合了链接的其他模型。我正在使用带有模型类的强类型视图:
public class GroupViewModel
{
public GroupViewModel()
{
Group = new Group();
Sections = new List<Section>();
}
public Group Group { get; set; }
public IEnumerable<Section> Sections { get; set; }
}
在控制器的 Edit 方法中,我用正确的数据填充两个字段并将其传递给视图。视图正确显示我的视图模型,出现多选并填充传递的数据,关于组也是如此。
但是在我将它发送回表单提交后,我在 ModelState 中得到了一个错误,例如“从类型 'System.String' 到类型 'Myapp.Models.Section' 的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。 "
ASP.NET 是正确处理子集合还是我需要使用旧的 FormCollection 来处理它?
UPD:也许应用程序无法将解析的int转换为Section,因为Section是类并且可能无法从客户端获取某些字段(实际上,多选仅使用Id和Name,但省略了其他字段)?
UPD1:作为临时解决方案,我将代码更改为:
public class GroupViewModel
{
public GroupViewModel()
{
Group = new Group();
Sections = new List<Section>();
}
public Group Group { get; set; }
public IEnumerable<int> SectionsIds { get; set; } //here
public IEnumerable<Section> SectionsDS { get; set; } //as here
}
在视图中,我将其绑定为:
@Html.ListBoxFor(x => x.SectionIds,
new MultiSelectList(Model.SectionsDS, "Id", "Name"));
在检索视图模型同步 2 个集合之后 - 手动虚拟导航和 ID。