gpt4 book ai didi

c# - 下拉菜单的自动映射器映射 IEnumerable

转载 作者:行者123 更新时间:2023-11-30 20:05:41 33 4
gpt4 key购买 nike

问题

我目前正在向我的 MVC 项目添加自动映射,但我遇到了困难。现在我有一个用户模型用于表示数据库中的数据。我必须将该模型映射到将在调用 Edit 方法时使用的 EditUserModel。 EditUserModel 有 IEnumerable<SelectListItem> (对于下拉菜单)我似乎无法弄清楚如何映射。

尝试的解决方案

到目前为止,我还没有尝试实现任何东西。我不确定 IEnumerable<SelectListItem> 的最佳位置在哪里或在哪里填充它。现在它正在 Controller 中填充。

User.cs

public class User
{
[Key]
public int UserID { get; set; }

public string Username { get; set; }

public string Password { get; set; }

public int RoleID { get; set; }

[ForeignKey("RoleID")]
public virtual Role Role { get; set; }
}

EditUserModel.cs

public class EditUserViewModel
{
[HiddenInput(DisplayValue = false)]
public int UserID { get; set; }

[Required]
public String Username { get; set; }

[Required]
[DataType(DataType.Password)]
public string Password { get; set; }

[DisplayName("Role")]
[Required]
public int RoleID { get; set; }

//The trouble field
public IEnumerable<SelectListItem> Roles { get; set; }
}

Controller.cs

EditUserViewModel model = new EditUserViewModel();
//Population of the dropdown menu
model.Roles = context.Roles
.ToList()
.Select(x => new SelectListItem
{
Text = x.Description,
Value = x.RoleID.ToString()
});
//Mapping that the automaper will take care of
model.UserID = user.UserID;
model.Username = user.Username;
model.RoleID = user.RoleID;

最佳答案

郑重声明,这是我在对 Jakub 的回答的评论中所说的内容:

public static class EnumerableExtensions
{
public static IEnumerable<SelectListItem> ToSelectList<T, TTextProperty, TValueProperty>(this IEnumerable<T> instance, Func<T, TTextProperty> text, Func<T, TValueProperty> value, Func<T, bool> selectedItem = null)
{
return instance.Select(t => new SelectListItem
{
Text = Convert.ToString(text(t)),
Value = Convert.ToString(value(t)),
Selected = selectedItem != null ? selectedItem(t) : false
});
}
}

不用说,这非常简单并且完成了同样的事情(并且在属性路径不简单的情况下实际上更健壮,因为 Jakub 的解决方案不适用于嵌套属性)。

(这不是真正的答案,我将其发布为社区维基只是为了帮助阐述一个观点)

关于c# - 下拉菜单的自动映射器映射 IEnumerable<SelectListItem>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938757/

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