Итак, я следую учебникам 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)]
Возможно, это поможет?В вашем контроллере должны быть оба метода.
Первый метод предназначен для запросов GET, запросов, которые не являются результатом представления формы. Это те, которые вы видите, если вы идете /Edit/ 1/Edit/2 и т.д.
Метод ActionResult Edit() не заменяет ваш первый метод Edit(), но является дополнительным методом, который отвечает на запросы POST, которые являются результатом отправки формы
На самом деле у вас есть два Изменить действия, не так ли? Не следует использовать атрибут [AcceptVerbs] и использовать для отображения начального вида редактирования, другое действие принимает только вызовы POST и используется для преобразования любых значений из формы в модель и сохранения их в хранилище данных.
Из вашей формулировки это похоже на то, что вместо добавления второго действия (метода) редактирования вы отредактировали старый.