Asp.net Entity Framework можно ли изменить значения клиента почтовым методом

Я работаю над проектом с использованием 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, чтобы узнать, новая это запись или существующая. Но во время теста я обнаружил, что если я создаю запись, не закрывая веб-страницу, и изменяю некоторые значения, снова нажимаю кнопку «сохранить» в браузере, новая запись будет создана вместо изменения только что созданной записи.

Я проследил весь рабочий процесс и обнаружил, что:

  1. Когда я нажимаю кнопку «Сохранить» в первый раз, чтобы создать запись, «id» объекта фильма действительно изменился после функции Savechanges.
  2. Когда браузер перезагружает страницу после создания, свойство id модели на веб-странице действительно изменяется на ненулевое значение.
  3. Но, наконец, результат отображения идентификатора на веб-странице по-прежнему равен нулю ~ !!! Итак, во второй раз контроллер получает значение из элемента формы веб-страницы с 0. 4. Независимо от того, использую ли я hiddenfor, hidden, editFor на веб-странице, результат будет таким же. 5.Поскольку сообщение об ошибке проверки, отображаемое на веб-странице, также изменяется с помощью метода публикации, я думаю, что могут быть некоторые внутренние настройки EF для предотвращения изменения значения. Но даже если я удалил атрибут AntiForgery как со стороны контроллера, так и со стороны веб-страницы, результат также будет таким же ...

Есть ли кто-нибудь, кто может помочь?

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

Hitesh Kansagara 31.03.2018 05:23

@Hitesh Я действительно сделал то, что вы сказали, но когда я нажимаю кнопку сохранения во второй раз, я все еще получаю 0 в контроллере. И я обнаружил, что не только ID, но и все другие поля нельзя изменить после публикации, а не неважно, что это за @html.xxxfor. Но во время трассировки значение модели на веб-странице при перезагрузке действительно меняется ... Есть еще какие-нибудь советы?

Ruyu Bao 31.03.2018 05:44

Но на самом деле, когда мы возвращаемся из контроллера, страница перезагружается и значение заполняется новым значением модели, это то, что мы вернули, и мы вернули модель со значением Id, тогда как идентификатор будет равен нулю, я также смущен

Hitesh Kansagara 31.03.2018 06:11

@Hitesh для методов получения, это не проблема. Для методов публикации значения модели вернулись в браузер, но похоже, что браузер не изменит значение '@ html.xxxfor' новым значением. Для MVC значения, переданные в Действия через json элемента html в форме, тогда во второй раз я могу получить только без изменений 0

Ruyu Bao 31.03.2018 06:32

отладьте свой код и посмотрите, когда вы возвращаете модель из контроллера после создания записи, посмотрите модель фильма, в которой он заполнен, или нет, если идентификатор заполнен, затем отладьте визуализацию представления и посмотрите, вы получаете идентификатор или нет, а затем дайте мне знать, что происходит

Hitesh Kansagara 31.03.2018 06:37

Если ModelState действителен и вы вставляете или обновляете запись, вы перенаправляетесь на другое представление. Единственный раз, когда вы используете return View(...); в методе POST, - это если ModelState недействителен (и вы возвращаете представление для отображения сообщений об ошибках, чтобы пользователь мог исправить ошибки.

user3559349 31.03.2018 06:40

И чтобы понять поведение, обратитесь к этот ответ - но использование ModelState.Clear() - это не то, что вам следует делать в этом случае.

user3559349 31.03.2018 06:41

@StephenMuecke Отлично ~ !!!!!!!!! Большое спасибо ~ !! Работает ~ !!!! Спасибо еще раз спасибо ~ !!!

Ruyu Bao 31.03.2018 06:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
50
0

Другие вопросы по теме