Asp.net mvc 3 带有下拉菜单的自动映射问题

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

我今天开始和AutoMapper合作。。。 但是我对下拉模式有一些问题

到目前为止,我所拥有的:

用户模型

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;
    }
}