所以,我想使用Bind来防止叠加攻击并使用[必填]字段。这两个似乎不可能一起使用。原因如下:
假设你有以下课程。您希望在创建视图中需要标题,以便每部电影都有标题,但在创建电影后您不希望用户能够编辑标题,因此您不需要在标题中包含标题。编辑操作的绑定声明。
public class Movie
{
public int ID { get; set; }
[Required]
public string Title { get; set; }
public string Director{ get; set; }
}
此编辑的Post方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include="ID,Director")] Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
ModelState.IsValid将始终为false。 ModelState.IsValid在这里永远不会成为真,因为类要求Title字段的值,但是在编辑时你永远不希望用户能够改变这个字段。
我看不出让这项工作的方法。我只是以错误的方式思考这个问题,或者是什么?
答案 0 :(得分:2)
为“创建”和“编辑”操作定义单独的(视图)模型,例如MovieCreateViewModel
(包含[Required]Title
属性)和MovieEditViewModel
(不包含[Required]
)。