在MVC中,如何同时使用Bind(防止叠加)和[Required]字段? (更多内部)

时间:2016-09-20 19:54:42

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

所以,我想使用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字段的值,但是在编辑时你永远不希望用户能够改变这个字段。

我看不出让这项工作的方法。我只是以错误的方式思考这个问题,或者是什么?

1 个答案:

答案 0 :(得分:2)

为“创建”和“编辑”操作定义单独的(视图)模型,例如MovieCreateViewModel(包含[Required]Title属性)和MovieEditViewModel(不包含[Required])。