У меня есть ViewModel, которая выглядит следующим образом:
public class CreateReviewViewModel
{
public string Title { get; set; }
public decimal Score { get; set; }
public ICollection<RecommendationViewModel> Recommendations { get; set; }
}
Итак, первые два являются базовыми нативными типами - easy.
Третье свойство - это коллекция другого ViewModel:
public class RecommendationViewModel
{
public RecommendationType RecommendationType { get; set; }
public bool IsRecommendedFor { get; set; }
}
RecommendationType
- это enum
в моей модели домена, в котором byte
значения представляют другую "рекомендацию".
В моем действии [HttpGet]
я делаю это:
var model = new CreateReviewViewModel
{
Recommendations = SomeMethodWhichLoopsThroughTheEnumMembersAndCreatesTheModel();
}
return View(model);
Таким образом, я получаю список RecommendationViewModel
со свойствами bool
, установленными на false
.
Затем в моем представлении я использую EditorTemplates:
@Html.EditorFor(model => model.Recommendations)
, который вызывает пользовательский шаблон Editor, который отображает метку и флажок для двух свойств.Круто.
Итак - есть фон, который, надеюсь, имеет смысл.
Как мне сопоставить эту ViewModel с моделью Review
домена в действии [HttpPost]
?
Часть объекта Review
выглядит следующим образом:
public class Review
{
public bool IsRecommendedForA { get; set; }
public bool IsRecommendedForB { get; set; }
// etc
}
В настоящее время я выполняю настраиваемое отображение следующим образом:
var review = new Review();
review.IsRecommendedForA = this.Recommendations.SingleOrDefault(x => x.RecommendationType == RecommendationType.A).IsRecommendedFor;
review.IsRecommendedForB = this.Recommendations.SingleOrDefault(x => x.RecommendationType == RecommendationType.B).IsRecommendedFor;
Это очень утомительно.
Могу ли я сделать то же самое с AutoMapper?
Конечно, я мог бы просто добавить все различные РекомендацииType в качестве базовых свойств в ViewModel вместо коллекции, но тогда мой View стал сложными я не могу использовать EditorTemplates для неявного цикла по коллекции - мне нужно было бы выписать Html.EditorFor
для каждого свойства.
Есть идеи?