我有2个表格。一个叫做Help,另一个叫做HelpSolution。帮助可以有很多解决方案。这是他们的模特。
public class Help
{
public int ID { get; set; }
public string Description { get; set; }
public Priority? Priority { get; set; }
public bool Condition { get; set; }
public int? EmployeeID { get; set; }
public int? HelpCategoryID { get; set; }
public int? HelpTypeID { get; set; }
public virtual Employee Employee { get; set; }
public virtual HelpCategory HelpCategory { get; set; }
public virtual HelpType HelpType { get; set; }
public virtual ICollection<HelpSolution> HelpSolutions { get; set; }
}
(是的,我知道,它有很多价值,大部分都不重要,但是最后一个)
public class HelpSolution
{
public int ID { get; set; }
public string Solution { get; set; }
public virtual int? HelpID { get; set; }
public virtual Help Help { get; set; }
public bool Selected { get; set; }
}
在帮助视图中,我创建了一个名为Submit的新Action,其中我基本上使用复选框确认哪些解决方案有效。在该表单中,我在复选框中显示该特定帮助的解决方案(使用HelpID)。我想做一个我提交的表单,按下复选框,它将数据库中的HelpSolution值从 false更改为true ,因为我认为它已被选为有效的解决方案(帮助可以有许多解决方案和许多有效的解决方案。)
我在Controller中创建了一个ActionResult,但它非常垃圾,所以我来这里询问我怎么能这样做?任何帮助都非常感谢。
这是行动:
public ActionResult Submit(int id)
{
HelpViewModel help = Mapper.Map<Help,
HelpViewModel(unitOfWork.HelpRepository.GetByID(id));
if (help == null)
{
return HttpNotFound();
}
return View(help);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Submit(HelpViewModel model)
{
if (ModelState.IsValid)
{
Help help = Mapper.Map<Help>(model);
AddOrUpdateSolutions(help, model.HelpSolutions);
unitOfWork.HelpRepository.Update(help);
unitOfWork.Save();
return RedirectToAction("Details", new { id = model.ID });
}
return View(model);
}
我尝试设置值的操作是AddOrUpdateSolutions,但我写的很糟糕所以我认为它不会有帮助。我只需要知道如何做这件事。
答案 0 :(得分:0)
嗯,我自己找到了一个解决方案,可能它非常糟糕,但它确实有效,我没有其他想法。
public ActionResult Submit(int id)
{
HelpViewModel help = Mapper.Map<Help, HelpViewModel>(unitOfWork.HelpRepository.GetByID(id));
if (help == null)
{
return HttpNotFound();
}
return View(help);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Submit(HelpViewModel model)
{
if (ModelState.IsValid)
{
Help help = Mapper.Map<HelpViewModel,Help>(model);
model.HelpSolutions = PopulateSolutionData(model.ID);
foreach (var solution in help.HelpSolutions)
{
var entityItem = db.HelpSolutions.FirstOrDefault(s => s.ID == solution.ID);
if (solution.Selected == true){
entityItem.Selected = true;
}
else{
entityItem.Selected = false;
}
db.Entry(entityItem).State = EntityState.Modified;
db.SaveChanges();
}
return RedirectToAction("Details", new { id = model.ID });
}
return View(model);
}
PopulateSolutionData只是从数据库填充解决方案并将它们全部设置为false。基本上解决这个问题的是使用db而不是UnitOfWork,只使用if设置值并将entitystate设置为modified。