Просмотр не обновляется после публикации
У меня есть метод контроллера 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(), метод сохранения работает хорошо, и если я отлаживаю и наблюдаю за значениями car после вызова Save (), идентификатор правильный, но когда отображается представление, в представлении отображается 0.
Может кто-нибудь, пожалуйста, помогите мне, и скажите мне, почему это произойдет. Разве я не предполагаю изменить модель для представления в методе HTTP POST? Должен ли я скорее перенаправить на оригинальный метод CreateOrUpdate(), если сохранение было успешным.
3 ответа
Это должна быть проблема ModelState. если вы используете Htmlhelper для отображения значения идентификатора. По умолчанию HtmlHelper отображает значение ModelState, а не Model. Попробуйте отобразить значение модели в поле зрения
<td>
@Model.id
</td>
или очистить значение ModelState в контроллере
ModelState.Clear();
или сбросить значение идентификатора после SaveChange.
theCar.Save();
ModelState["id"].Value = theCar.id
return View(theCar);
Я добавил ModelState.Clear()
в мой метод HttpPost Controller, как видно из этого поста, помощники Html получают данные из состояния модели, а не из модели, если вы возвращаете то же представление после публикации формы. чтобы получить обновленные данные в представлении, используйте шаблон post redirect get или ModelState.Clear(), и это решило проблему.
Спасибо
Я не хотел очищать ModelState, потому что мне нужно было отображать ошибки, поэтому я пошел с
ValueProviderResult vpr = new ValueProviderResult("", null, System.Globalization.CultureInfo.CurrentCulture);
ModelState["id"].Value = vpr;