【问题标题】:Having an issue understanding why NerdDinner MVC is returning an error无法理解为什么 NerdDinner MVC 返回错误
【发布时间】:2009-07-30 06:10:46
【问题描述】:

所以我正在关注 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 错误。显然找不到编辑视图。我很难理解为什么会这样。我什至试图复制确切的语法(我不喜欢这样做。)但没有运气。我错过了什么明显的东西吗?

编辑:我一添加这一行就发生了:

[AcceptVerbs(HttpVerbs.Post)]

也许会有帮助?

【问题讨论】:

  • 404 发生在 GET 还是 POST 上?第一种方法用于 GET,第二种方法用于 POST。正如吹镖所说,我们不是在更改编辑方法,而是添加第二个。

标签: c# asp.net-mvc model-view-controller


【解决方案1】:

您需要在控制器中同时拥有这两种方法。

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

ActionResult Edit() 方法不会取代您的第一个 Edit() 方法,而是一种附加方法,它响应作为发送表单结果的 POST 请求

【讨论】:

  • 工作。谢谢一堆。不敢相信我没有在文档中看到这一点。
【解决方案2】:

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

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

【讨论】:

  • 这正是我所做的。当他说要​​超载动作时,我应该更仔细地阅读教程。感谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2014-05-18
  • 1970-01-01
  • 2022-06-19
  • 2021-07-25
  • 1970-01-01
  • 2019-10-26
相关资源
最近更新 更多