Я работаю над проектом с использованием asp.net MVC с Entity Framework. Меня попросили объединить страницу создания и страницу редактирования. Другими словами, если нет записи, создайте ее, в противном случае - отредактируйте. Но возникает проблема:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ID,Title,ReleaseDate,Genre,Price")] Movie movie)
{
if (ModelState.IsValid)
{
if (movie.ID ==0)
{
db.Movies.Add(movie);
}
else
{
db.Entry(movie).State = EntityState.Modified;
}
db.SaveChanges();
}
return View(movie);
}
Из приведенного выше кода видно, что я проверяю свойство «id» в DBcontext, чтобы узнать, новая это запись или существующая. Но во время теста я обнаружил, что если я создаю запись, не закрывая веб-страницу, и изменяю некоторые значения, снова нажимаю кнопку «сохранить» в браузере, новая запись будет создана вместо изменения только что созданной записи.
Я проследил весь рабочий процесс и обнаружил, что:
Есть ли кто-нибудь, кто может помочь?
@Hitesh Я действительно сделал то, что вы сказали, но когда я нажимаю кнопку сохранения во второй раз, я все еще получаю 0 в контроллере. И я обнаружил, что не только ID, но и все другие поля нельзя изменить после публикации, а не неважно, что это за @html.xxxfor. Но во время трассировки значение модели на веб-странице при перезагрузке действительно меняется ... Есть еще какие-нибудь советы?
Но на самом деле, когда мы возвращаемся из контроллера, страница перезагружается и значение заполняется новым значением модели, это то, что мы вернули, и мы вернули модель со значением Id, тогда как идентификатор будет равен нулю, я также смущен
@Hitesh для методов получения, это не проблема. Для методов публикации значения модели вернулись в браузер, но похоже, что браузер не изменит значение '@ html.xxxfor' новым значением. Для MVC значения, переданные в Действия через json элемента html в форме, тогда во второй раз я могу получить только без изменений 0
отладьте свой код и посмотрите, когда вы возвращаете модель из контроллера после создания записи, посмотрите модель фильма, в которой он заполнен, или нет, если идентификатор заполнен, затем отладьте визуализацию представления и посмотрите, вы получаете идентификатор или нет, а затем дайте мне знать, что происходит
Если ModelState действителен и вы вставляете или обновляете запись, вы перенаправляетесь на другое представление. Единственный раз, когда вы используете return View(...); в методе POST, - это если ModelState недействителен (и вы возвращаете представление для отображения сообщений об ошибках, чтобы пользователь мог исправить ошибки.
И чтобы понять поведение, обратитесь к этот ответ - но использование ModelState.Clear() - это не то, что вам следует делать в этом случае.
@StephenMuecke Отлично ~ !!!!!!!!! Большое спасибо ~ !! Работает ~ !!!! Спасибо еще раз спасибо ~ !!!





сохранить поле идентификатора как скрытое поле на веб-странице, когда вы сохраняете в первый раз, оно будет равно нулю, тогда после сохранения этой записи модель фильма изменила идентификатор с 0 на любое число, созданное Entity Framework, теперь вы возвращаете представление с этой моделью фильма, которая имеет идентификатор затем отобразите вашу страницу с идентификатором, тогда нет проблем с повторным созданием.