Вы не можете инициализировать список TagsViewModel со списком Тегов . Не существует неявного преобразования между двумя списками и неявного преобразования между тегами и тегамиViewViewModel.
Вам необходимо самостоятельно реализовать это преобразование.
Одна из возможностей заключается в использовании неявного ключевого слова оператора
Например, вы можете добавить этот код в класс Tags:
public static implicit operator TagsViewModel(Tags source)
{
if (source == null) return null;
TagsViewModel model = new TagsViewModel();
model.Id = source.Id;
.... set the other properties here...
return model;
}
Теперь мы проинструктировали класс Tags , как преобразовать себя в TagsViewModel .
На этом этапе код, который присваивает List<TagsViewModel>
можно изменить на:
public ActionResult SelectTags()
{
TagsModel tags = new TagsModel();
using (ProjectEntities db = new ProjectEntities())
{
foreach(var t in db.Tags)
// At this point the Tags t variable will be
// converted to a TagsViewModel and added to the list
tags.Tags.Add(t);
}
return View(tags);
}
Не забудьте инициализировать свойство Tags внутри переменной tags.
Измените класс TagsModel на
public class TagsModel
{
public virtual List<TagsViewModel> Tags { get; set; } = new List<TagsViewModel>();
}
Для части POST вы делаете обратное. Добавьте неявное преобразование в класс TagsViewModel
public static implicit operator Tags(TagsViewModel source)
{
if (source == null) return null;
Tags model = new Tags();
model.Id = source.Id;
.... set the other properties here...
return model;
}
и используйте foreach l oop для построения списка SelectedTags
[HttpPost]
public ActionResult SelectTags(TagsModel model)
{
List<Tags> selectedTags = new List<Tags>();
foreach(var t in model.Tags.Where(x => x.IsChecked))
selectedTags.Add(t);
return Content(String.Join(",",selectedTags.Select(x => x.TagsId)));
}