我环顾四周,发现一些亲密的答案,但我还没有看到一个。是这样的:ASP.NET MVC复杂视图映射
使用实体框架我有以下几点:
的榜样:
public class Role
{
[Key]
public short RoleId { get; set; }
public string RoleName { get; set; }
public string RoleDescription { get; set; }
}
用户模型:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Username { get; set; }
//more fields etc...
public virtual ICollection<UserRole> UserRoles { get; set; }
}
和UserRole的模型:
public class UserRole
{
[Key]
public int UserRoleId { get; set; }
public int UserId { get; set; }
public short RoleId { get; set; }
public virtual Role Role { get; set; }
}
我想要做的是确定如何编写viewmodel,以便在编辑用户时创建新用户和可用+所选角色列表时显示所有可用角色的列表。我可以实现已经使用foreach的第一部分,但我觉得它很脏。
在我看到的所有例子中,整个viewmodel被封装在主视图上的一个IEnumerable中,并且使用@ Html.EditorForModel()和一个编辑器模板来呈现。这似乎允许将视图数据自动映射回底层模型。我想用同样的技术来实现这一点,但似乎无法围绕处理单一用户模型中的Role/UserRole集合的问题。
的StackOverflow问题,我引用:Generate Dynamically Checkboxes, And Select Some of them as Checked
“我觉得这是脏” 是不足够的理由放弃的技术。如果它导致你的维修头痛,那么通过一切手段去做别的事情,但不要因为有人说这是一种不好的做法而解雇一个想法。 – 2014-09-18 22:26:23
您的模型没有指示是否为用户选择角色的属性,因此您需要创建视图模型来表示要显示/编辑的内容 – 2014-09-18 22:29:49
@ stephen-muecke我知道我应该使用视图模型。我的主要困惑在于如何定义视图模型,然后在编辑器模板中实现它,以便它仅遍历IEnumerable/ICollections的那些属性。 – 2014-09-18 22:34:37