問題Automapper映射的IEnumerable <SelectListItem>的下拉菜單
我目前將自動映射到我的MVC項目,我堅持。現在我有一個用戶模型用來表示數據庫中的數據。我必須將該模型映射到EditUserModel,EditUserModel將在調用Edit方法時使用。 EditUserModel有IEnumerable<SelectListItem>
(下拉菜單),我似乎無法弄清楚如何映射。
嘗試性解決方案
截至目前我還沒有嘗試過實施什麼。我不確定IEnumerable<SelectListItem>
的最佳位置或填充位置。現在它正在控制器中填充。
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;
好的我看到,減少了用於生成IEnumerable的代碼量。但映射器無法解決它。所以這是在你的控制器中完成它的最好方法。 EditUserViewModel model = Mapper.Map (user); model.Roles = context.Roles.ToSelectList(r => r.RoleID,r => r.Description); –