为什么操作方法DeleteConfirmed使用模型id而不是模型对象作为其参数?

时间:2012-09-12 09:11:54

标签: c# asp.net-mvc asp.net-mvc-4

我是ASP.NET MVC的新手,现在通过阅读asp.net中给出的教程从0学习。我的问题可能太简单了,但我找不到答案。为了快速回复,我在这里问。

编辑操作方法:

        // GET: /Movie/Edit/5

        public ActionResult Edit(int id = 0)
        {
            Movie movie = db.Movies.Find(id);
            if (movie == null)
            {
                return HttpNotFound();
            }
            return View(movie);
        }

        //
        // POST: /Movie/Edit/5

        [HttpPost]
        public ActionResult Edit(Movie movie)
        {
            if (ModelState.IsValid)
            {
                db.Entry(movie).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(movie);
        }

删除操作方法:

        //
        // GET: /Movie/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Movie movie = db.Movies.Find(id);
            if (movie == null)
            {
                return HttpNotFound();
            }
            return View(movie);
        }

        //
        // POST: /Movie/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Movie movie = db.Movies.Find(id);
            db.Movies.Remove(movie);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

让我们比较HTTP POST以进行更新和删除。我很好奇:

为什么操作方法DeleteConfirmed使用模型id而不是模型对象作为参数?

1 个答案:

答案 0 :(得分:5)

  

为什么操作方法DeleteConfirmed使用模型ID而不是   模型对象作为参数?

因为删除实体所需要的只是它的id,而为了编辑这个实体,你需要整个对象。另外我猜这个调用此Delete操作的视图只是在请求中发送要删除的实体的id,因此删除操作占用整个实体是没有意义的,因为它永远不会被绑定。