C# 理解NerdDinner MVC返回错误的原因有问题

C# 理解NerdDinner MVC返回错误的原因有问题,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,因此,我正在学习ScottGu的NerdDinner教程,我很难理解这个错误。我正在尝试实现CRUD,因此首先,在编辑数据时,我从以下代码开始: public ActionResult Edit(int id) { Dinner dinner = dinnerRepository.GetDinner(id); return View(dinner); } 这将正确显示“编辑”视图,并提供用于编辑数据的字段。现在,当我继续时,我的编

因此,我正在学习ScottGu的NerdDinner教程,我很难理解这个错误。我正在尝试实现CRUD,因此首先,在编辑数据时,我从以下代码开始:

        public ActionResult Edit(int id)
    {
        Dinner dinner = dinnerRepository.GetDinner(id);
        return View(dinner);
    }
这将正确显示“编辑”视图,并提供用于编辑数据的字段。现在,当我继续时,我的编辑操作变成:

        [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(int id, FormCollection formValues) 
    {
    Dinner dinner = dinnerRepository.GetDinner(id);
    UpdateModel(dinner);
    dinnerRepository.Save();
    return RedirectToAction("Details", new { id = dinner.DinnerID });
    }
我返回一个404错误。显然找不到编辑视图。我很难理解为什么会发生这种情况。我甚至试着复制确切的语法(我不喜欢这样做),但运气不好。我错过了那么明显的东西吗

编辑:添加此行后立即执行:

[接受动词(HttpVerbs.Post)]


也许这会有所帮助?

您需要在控制器中同时使用这两种方法

第一种方法用于GET请求,这些请求不是表单提交的结果。如果你去/Edit/1/Edit/2等,这些就是你看到的


ActionResult Edit()方法不会取代您的第一个Edit()方法,而是一个附加方法,用于响应发送表单后的POST请求

您实际上有两个编辑操作,是吗?一个操作不带[AcceptVerbs]属性,用于显示初始编辑视图,另一个操作仅接受POST调用,用于将表单中发布的任何值转换为模型,并将其保存在数据存储中


从您的措辞来看,似乎您没有添加第二个编辑操作(方法),而是编辑了旧的操作。

404是发生在GET还是POST上?第一种方法用于GET,第二种方法用于POST。正如blowdart所说,我们没有更改编辑方法,而是添加了第二个方法。非常感谢。真不敢相信我没有在文档中看到。这正是我所做的。当他说让动作超负荷时,我应该仔细阅读一下教程。谢谢大家的帮助。