asp.net实体框架可以通过post方法更改客户端值

时间:2018-03-31 03:02:31

标签: asp.net asp.net-mvc entity-framework http post

我正在使用带有Entity Framework的asp.net MVC开展项目。 我被要求将创建页面和编辑页面组合在一起。换句话说,如果没有记录,则创建它,否则,编辑它。但它带来了一个问题:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include="ID,Title,ReleaseDate,Genre,Price")] Movie movie)
{
    if (ModelState.IsValid)
    {
        if(movie.ID ==0)
        {
             db.Movies.Add(movie);
        }
        else
        {
             db.Entry(movie).State = EntityState.Modified;
        }
        db.SaveChanges();                
    }
    return View(movie);
}

从上面的代码中,您可以看到我在DBcontext中检查属性“id”,以了解它是新记录还是现有记录。 但在测试过程中,我发现如果我创建一个没有关闭网页的记录,并更改了一些值,再次按下浏览器中的“保存”按钮,将创建一条新记录,而不是修改刚创建的记录。

我已经跟踪了整个工作流程并发现:

  1. 当我第一次单击“保存”按钮创建记录时,保存更改功能后,影片对象的“id”会发生变化。
  2. 当浏览器在创建后重新加载页面时,网页中Model的id属性实际上变为非零。
  3. 但最后网页上ID的显示结果仍为零〜!!!所以在第二次,控制器从网页的表单元素获取值为0。 4.无论我在网页中使用hiddenfor,hidden,editFor,结果都是一样的。 5.由于网页上显示的验证错误消息也是通过post方法更改的,我认为可能有一些EF的内部设置可以防止价值变化。但即使我从控制器和网页两侧删除了AntiForgery属性,结果也是一样的......
  4. 有没有人可以提供帮助?

0 个答案:

没有答案