Asp.net mvc 使用TryUpdateModel在编辑文章中使用FormCollection保存对象
我不确定我是否了解这样做的最佳方式 如果我有一个包含大量字段的模型,那么我必须在TryUpdateModel下的白名单中明确列出其中的每一个字段,或者我可以只传递ForCollection 下面的代码不保存我的编辑,这是我唯一可以逐个列出所有字段的方法吗Asp.net mvc 使用TryUpdateModel在编辑文章中使用FormCollection保存对象,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我不确定我是否了解这样做的最佳方式 如果我有一个包含大量字段的模型,那么我必须在TryUpdateModel下的白名单中明确列出其中的每一个字段,或者我可以只传递ForCollection 下面的代码不保存我的编辑,这是我唯一可以逐个列出所有字段的方法吗 public ActionResult Edit(int id, FormCollection form) { var jobToUpdate = db.Jobs .Include(x =>
public ActionResult Edit(int id, FormCollection form)
{
var jobToUpdate = db.Jobs
.Include(x => x.JobNotes)
.Where(x => x.JobID == id)
.SingleOrDefault();
if (TryUpdateModel(jobToUpdate, form))
{
db.Entry(jobToUpdate).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Details", new { id = model.Job.JobID });
}
return RedirectToAction("Details", new { id = model.Job.JobID })
}
其次,获取已更改字段列表的最佳方法是什么。如果用户更改的唯一字段是FirstName字段,我希望将其记录在审计日志中
谢谢你的帮助 如果模型中的字段不在表单中,并且您不希望用户更改,则可以使用排除列表。使用包含或排除列表的选择将取决于最大的列表。包含列表更安全,就像您忘记包含无法更改的内容一样。不使用include或exclude列表将使您容易受到模型填充的影响,用户可以发布额外的值来更改他们不应该能够更改的详细信息
public ActionResult Edit(int id, FormCollection form)
{
var jobToUpdate = db.Jobs
.Include(x => x.JobNotes)
.Where(x => x.JobID == id)
.SingleOrDefault();
if (TryUpdateModel(jobToUpdate, String.Empty, null, new [] {"SecretField"}, form))
{
db.SaveChanges();
return RedirectToAction("Details", new { id = model.Job.JobID });
}
// Model not saved - send them back to edit page for corrections
return View(jobToUpdate);
}
如果未保存模型,则不应重定向。将它们显示在同一页面上,并确保编辑视图显示模型错误
代码未保存模型的最可能原因是您试图插入一个无效的值。如果模型上的字段不在表单中,并且您不希望用户更改,则可以使用排除列表。使用包含或排除列表的选择将取决于最大的列表。包含列表更安全,就像您忘记包含无法更改的内容一样。不使用include或exclude列表将使您容易受到模型填充的影响,用户可以发布额外的值来更改他们不应该能够更改的详细信息
public ActionResult Edit(int id, FormCollection form)
{
var jobToUpdate = db.Jobs
.Include(x => x.JobNotes)
.Where(x => x.JobID == id)
.SingleOrDefault();
if (TryUpdateModel(jobToUpdate, String.Empty, null, new [] {"SecretField"}, form))
{
db.SaveChanges();
return RedirectToAction("Details", new { id = model.Job.JobID });
}
// Model not saved - send them back to edit page for corrections
return View(jobToUpdate);
}
如果未保存模型,则不应重定向。将它们显示在同一页面上,并确保编辑视图显示模型错误
代码未保存模型的最可能原因是您试图插入无效的值