Просмотр после обновления после публикации
У меня есть метод контроллера CreateOrUpdate, этот метод должен сохранить автомобиль в базе данных и затем вернуться как обычно.
public ActionResult CreateOrUpdate(int ID = 0)
{
Car car = new Car(ID);
}
[HttpPost]
public ActionResult CreateOrUpdate(Car car)
{
car.Save();
return View(car);
}
В методе Car.Save() я устанавливаю идентификатор для автомобиля, независимо от того, какой идентификатор будет в базе данных после сохранения автомобиля (при выполнении вставки я использую SCOPE_IDENTITY(), метод сохранения работает хорошо, и если я отлаживаю и просматриваю значения для автомобиля после вызова Save(), идентификатор верен. Но когда визуализируется представление, в представлении ID равен 0.
Может кто-нибудь, пожалуйста, помогите мне и скажите, почему это произойдет. Не могу ли я изменить модель для представления в методе HTTP POST? Должен ли я перенаправить исходный метод CreateOrUpdate(), если сохранение было успешным.
Ответы
Ответ 1
это должна быть проблема ModelState.
если вы используете Htmlhelper для отображения значения id.
Default HtmlHelper display ModelState значение не Модель.
Попробуйте отобразить значение модели в поле зрения
<td>
@Model.id
</td>
или значение CleanStartStart в контроллере
ModelState.Clear();
или reset после значения SaveChange.
theCar.Save();
ModelState["id"].Value = theCar.id
return View(theCar);
Reset значение textarea после отправки формы
Ответ 2
Я добавил ModelState.Clear()
к моему методу HttpPost Controller, как показано в этом сообщении Помощники Html получают данные из состояния модели, а не из модели, если вы возвращаете одно и то же представление после сообщения формы. для получения обновленных данных в представлении используйте post redirect get pattern или ModelState.Clear(), и он решил проблему.
Спасибо
Ответ 3
Я не хотел очищать ModelState, потому что мне нужно было отображать ошибки, поэтому я пошел с
ValueProviderResult vpr = new ValueProviderResult("", null, System.Globalization.CultureInfo.CurrentCulture);
ModelState["id"].Value = vpr;