C# 自动映射-是否将字符串属性转换为SelectList?

C# 自动映射-是否将字符串属性转换为SelectList?,c#,asp.net-mvc,automapper,C#,Asp.net Mvc,Automapper,我刚开始在MVC项目中学习AutoMapper。我有一个基本实体“Attendee”,带有一个用于性别的字符串字段(可能值为“M”或“F”) 我已经在Attendee和AttendeeEditView对象之间创建了一个基本映射。我要做的是将模型侧的“M”或“F”性别字符串转换为ViewModel侧的SelectList,并在列表中选择适当的值 我想我需要一个ValueResolver来做这个。。。以下是我写的: public class GenderMenuResolver : ValueRes

我刚开始在MVC项目中学习AutoMapper。我有一个基本实体“Attendee”,带有一个用于性别的字符串字段(可能值为“M”或“F”)

我已经在Attendee和AttendeeEditView对象之间创建了一个基本映射。我要做的是将模型侧的“M”或“F”性别字符串转换为ViewModel侧的SelectList,并在列表中选择适当的值

我想我需要一个ValueResolver来做这个。。。以下是我写的:

public class GenderMenuResolver : ValueResolver<Attendee, SelectList> {
    protected override SelectList ResolveCore( Attendee source ) {
        List<object> items = new List<object>(){
            new{ Value = "F" , Text = "Female" },
            new{ Value = "M" , Text = "Male" }
        };

        string Gender = source.Gender ?? "";
        string selectedValue = new List<string>() { "M", "F" }.Contains( Gender.ToUpper() ) ? Gender.ToUpper() : "";

        SelectList GenderMenu = new SelectList(
            items,
            "Value",
            "Text",
            selectedValue
        );

        return GenderMenu;
    }
}
公共类gendermenuesolver:ValueResolver{
受保护的覆盖SelectList ResolveCore(与会者来源){
列表项=新列表(){
新的{Value=“F”,Text=“Female”},
新的{Value=“M”,Text=“Male”}
};
字符串Gender=source.Gender??“”;
string selectedValue=new List(){“M”,“F”}.Contains(Gender.ToUpper())?Gender.ToUpper():“”;
选择列表性别菜单=新建选择列表(
项目,
“价值”,
“文本”,
选择值
);
返回性别菜单;
}
}
和我的映射代码:

Mapper.CreateMap<Attendee, AttendeeEditView>()
.ForMember( dest => dest.Gender, opt => opt.ResolveUsing<GenderMenuResolver>() );


List<AttendeeEditView> ViewModel = Mapper.Map<List<AttendeeEditView>>( Attendees );
Mapper.CreateMap()
.ForMember(dest=>dest.Gender,opt=>opt.resolvesusing());
List ViewModel=Mapper.Map(与会者);
通过单步执行,我可以看到这段代码执行并输出一个正确的selectlist。但是,我得到以下错误:

映射类型:SelectList->SelectList System.Web.Mvc.SelectList-> System.Web.Mvc.SelectList

目标路径:列表'1[0]。Gender.Gender

源值:System.Web.Mvc.SelectList

首先,“.Gender.Gender”映射似乎不正确

但根本问题是什么。。。内部异常消息显示:

“类型'System.Web.Mvc.SelectList'没有默认构造函数”


有人能帮我找出我做错了什么,或者我应该使用更好的方法吗?谢谢。

我想你让这件事变得比实际情况更困难了。并非所有内容都需要映射,事实上,像
SelectList
s这样的内容几乎肯定不应该映射,因为它们只与视图模型相关,而与模型无关

因此,在视图模型中,只需执行以下操作:

public string Gender { get; set; }

public SelectList GenderChoices
{
    get
    {
        return new SelectList(new List<SelectListItem>
            {
                new SelectListItem { Value = "M", Text = "Male" },
                new SelectListItem { Value = "F", Text = "Female" }
            }, "Value", "Text", Gender);
    }
 }

我喜欢这个。。。我对使用ViewModels也相当陌生,所以我很欣赏这一见解。我试试看。
@Html.DropDownListFor(m => m.Gender, Model.GenderChoices)