У меня есть модель Project и модель Skill,
Проект имеет отношение один ко многим к навыкам
У меня проблема с выяснением, как выполнить метод действия action для проекта,
Когда объект проекта создается с помощью mvc, коллекция навыков равна нулю, в представлении я отображаю флажки, и мне нужно добавлять и удалять из этой коллекции
Я полагаю, мне нужно загрузить проект из базы данных, а затем отобразить измененные поля и затем сохранить, это правильный путь? Есть ли лучший способ сделать это, чем делать это вручную?
Заранее спасибо.
[HttpPost]
public ActionResult Edit(Project project)
{
if (ModelState.IsValid)
{
if (project.Skills == null)
{
project.Skills = new List<Skill>();
}
foreach (var key in Request.Params.AllKeys)
{
if (key.Contains("Skill_"))
{
if (Request.Params[key].Contains('t'))
{
var skillId = Convert.ToInt32(key.Split('_')[1]);
if (!project.Skills.Any(s => s.ID == skillId))
{
project.Skills.Add(db.Skills.Single(s => s.ID == skillId));
}
}
}
}
List<Skill> skillsToRemove = new List<Skill>();
foreach (var skill in project.Skills)
{
if (!Request.Params["Skill_" + skill.ID.ToString()].Contains('t'))
{
skillsToRemove.Add(skill);
}
}
foreach (var skill in skillsToRemove)
{
project.Skills.Remove(skill);
}
db.Entry(project).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.Skills = db.Skills.ToList();
return View(project);
}