一对多关系将另一个值设置为 false
One to Many Relationship setting another value to false
我有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; }
}
在“帮助视图”中,我创建了一个名为“提交”的新操作,我在其中基本上使用复选框确认哪些解决方案有效。在该表格中,我在复选框中显示了该特定帮助(使用 HelpID)的解决方案。我想做一个表单,在其中提交,按下复选框,它将数据库中的 HelpSolution 值从 false 更改为 true,因为我正在区分它已被选为有效解决方案(帮助可以有很多解决方案和许多有效的解决方案)。
我在控制器中创建了一个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,但我写得很糟糕,所以我认为它没有帮助。我只需要知道我应该如何去做这件事。
好吧,我自己找到了一个解决方案,可能很糟糕,但它有效,我没有其他想法。
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 设置值并将实体状态设置为已修改。
我有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; }
}
在“帮助视图”中,我创建了一个名为“提交”的新操作,我在其中基本上使用复选框确认哪些解决方案有效。在该表格中,我在复选框中显示了该特定帮助(使用 HelpID)的解决方案。我想做一个表单,在其中提交,按下复选框,它将数据库中的 HelpSolution 值从 false 更改为 true,因为我正在区分它已被选为有效解决方案(帮助可以有很多解决方案和许多有效的解决方案)。
我在控制器中创建了一个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,但我写得很糟糕,所以我认为它没有帮助。我只需要知道我应该如何去做这件事。
好吧,我自己找到了一个解决方案,可能很糟糕,但它有效,我没有其他想法。
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 设置值并将实体状态设置为已修改。