gpt4 book ai didi

c# - Automapper - 将字符串属性转换为 SelectList?

转载 作者:行者123 更新时间:2023-11-30 19:05:53 26 4
gpt4 key购买 nike

我刚刚开始在 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;
}
}

还有我的映射代码:

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


List<AttendeeEditView> ViewModel = Mapper.Map<List<AttendeeEditView>>( Attendees );

单步执行我可以看到这段代码执行并输出了一个正确的选择列表。但是,我收到以下错误:

Mapping types: SelectList -> SelectList System.Web.Mvc.SelectList -> System.Web.Mvc.SelectList

Destination path: List`1[0].Gender.Gender

Source value: System.Web.Mvc.SelectList

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

但问题的根源是什么……内部异常消息揭示了这一点:

"Type 'System.Web.Mvc.SelectList' does not have a default constructor"

任何人都可以帮助我确定我做错了什么,或者我应该使用更好的方法吗?谢谢。

最佳答案

我认为你让这件事变得比需要的更困难。并非所有内容都需要映射,事实上像 SelectList 这样的东西几乎肯定不应该被映射,因为它们只与 View 模型相关,而不是模型。

因此,在您的 View 模型中只需执行以下操作:

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

Gender 将被映射,但 GenderChoices 将仅存在于您的 View 模型中。

那么,在你看来:

@Html.DropDownListFor(m => m.Gender, Model.GenderChoices)

关于c# - Automapper - 将字符串属性转换为 SelectList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com