Asp.net mvc 3 带有下拉菜单的自动映射问题
我今天开始和AutoMapper合作。。。 但是我对下拉模式有一些问题 到目前为止,我所拥有的: 用户模型Asp.net mvc 3 带有下拉菜单的自动映射问题,asp.net-mvc-3,automapper,Asp.net Mvc 3,Automapper,我今天开始和AutoMapper合作。。。 但是我对下拉模式有一些问题 到目前为止,我所拥有的: 用户模型 public class User : Entity { public virtual string Name { get; set; } public virtual string Email { get; set; } public virtual string Password { get; set; } public vi
public class User : Entity
{
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual string Password { get; set; }
public virtual Role Role { get; set; }
}
榜样
public class Role : Entity
{
public virtual string Name { get; set; }
}
UserUpdateViewModel
public class UserUpdateViewModel
{
public int Id{get;set;}
[Required(ErrorMessage = "Required.")]
public virtual string Name { get; set; }
[Required(ErrorMessage = "Required."), Email(ErrorMessage = "Email Invalid."), Remote("EmailExists", "User", ErrorMessage = "Email already in use.")]
public virtual string Email { get; set; }
[Required(ErrorMessage = "Required.")]
public virtual string Password { get; set; }
[Required(ErrorMessage = "Required")]
public virtual string ConfirmPassword { get; set; }
[Required(ErrorMessage = "Required.")]
public int RoleId { get; set; }
public IList<Role> Roles { get; set; }
}
一些注意事项:1-我返回Content(),因为所有Ajax都是使用HTML 5 PushState等启用的
2-在我的Update(POST one)方法中,Autommapper返回的我的模型的角色为null 为什么Automapper返回的角色为空
这是与AutoMapper合作的正确方式吗?有小费吗
谢谢映射失败,因为您试图将单个角色直接映射到角色集合。并将角色集合返回到单个角色。您不能直接在它们之间映射,因为它们是不同的类型 如果要将角色映射到列表,则可以使用自定义值解析器
Mapper.CreateMap<User , UserUpdateViewModel>()
.ForMember(dest => dest.Roles, opt => opt.ResolveUsing<RoleToCollectionResolver>())
Public class RoleToCollectionResolver: ValueResolver<User,IList<Role>>{
Protected override IList<Role> ResolveCore(User source){
var roleList = new List<Role>();
roleList.Add(source.Role);
Return roleList;
}
}
Mapper.CreateMap()
.FormMember(dest=>dest.Roles,opt=>opt.resolvesusing())
公共类RoleToCollectionResolver:ValueResolver{
受保护的覆盖IList ResolveCore(用户源){
var roleList=新列表();
roleList.Add(source.Role);
返回角色扮演者;
}
}
首先,通常在应用程序启动时执行一次“CreateMap”。第二,什么是“用户系统”?你没有为此提供布局。另外,在设置AutoMaper(使用“CreateMap”调用)后,请始终执行“AssertConfigurationsValid”以确保没有丢失任何映射。感谢您的帮助。。。这是一个打字错误。。。用户系统=用户。。。我现在的问题只是Automapper返回的角色。。。
...
@Html.DropDownListFor(model => model.RoleId, new SelectList(Model.Roles, "Id", "Name"), "-- Select--", new { @class = "form radius" })
...
Mapper.CreateMap<User , UserUpdateViewModel>()
.ForMember(dest => dest.Roles, opt => opt.ResolveUsing<RoleToCollectionResolver>())
Public class RoleToCollectionResolver: ValueResolver<User,IList<Role>>{
Protected override IList<Role> ResolveCore(User source){
var roleList = new List<Role>();
roleList.Add(source.Role);
Return roleList;
}
}