Наличие проблемы с пониманием того, почему NerdDinner MVC возвращает ошибку

2

Итак, я следую учебникам ScottGu NerdDinner, и у меня есть некоторые проблемы, обворачивающие мою голову вокруг этой ошибки. Я пытаюсь реализовать CRUD, поэтому сначала, редактируя данные, я начал с этого кода:

        public ActionResult Edit(int id)
    {
        Dinner dinner = dinnerRepository.GetDinner(id);
        return View(dinner);
    }

который отображает Edit View правильно, и дает мне поля для редактирования моих данных. Теперь, когда я продолжаю, и мое действие "Редактировать" превращается в это:

        [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)]

Возможно, это поможет?
  • 0
    404 происходит на GET или POST? Первый метод для GET, второй для POST. Как говорит blowdart, мы не меняем метод редактирования, а добавляем второй.
Теги:
model-view-controller
asp.net-mvc

2 ответа

4
Лучший ответ

В вашем контроллере должны быть оба метода.

Первый метод предназначен для запросов GET, запросов, которые не являются результатом представления формы. Это те, которые вы видите, если вы идете /Edit/ 1/Edit/2 и т.д.

Метод ActionResult Edit() не заменяет ваш первый метод Edit(), но является дополнительным методом, который отвечает на запросы POST, которые являются результатом отправки формы

  • 0
    работал. Огромное спасибо. Не могу поверить, что я не уловил это в документации.
0

На самом деле у вас есть два Изменить действия, не так ли? Не следует использовать атрибут [AcceptVerbs] и использовать для отображения начального вида редактирования, другое действие принимает только вызовы POST и используется для преобразования любых значений из формы в модель и сохранения их в хранилище данных.

Из вашей формулировки это похоже на то, что вместо добавления второго действия (метода) редактирования вы отредактировали старый.

  • 0
    это именно то, что я сделал. Я должен был прочитать учебник немного ближе, когда он сказал, что перегрузить действие. Спасибо всем за помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню