我有一个控制器方法CreateOrUpdate,这个方法应该将汽车保存到数据库然后正常返回。
public ActionResult CreateOrUpdate(int ID = 0)
{
Car car = new Car(ID);
}
[HttpPost]
public ActionResult CreateOrUpdate(Car car)
{
car.Save();
return View(car);
}
在theCar.Save()方法中,我设置了汽车的id,在汽车保存后,无论数据库中的id是什么(当我使用SCOPE_IDENTITY()进行插入时,save方法运行良好,如果我在调用Save()之后调试并监视car的值,则id是正确的。但是当呈现View时,视图中的ID为0。
有人可以帮助我,并告诉我为什么会这样。我不想在HTTP POST方法中更改视图的模型吗?如果保存成功,我应该重定向到原始的CreateOrUpdate()方法。
答案 0 :(得分:60)
它应该是ModelState问题。 如果你使用Htmlhelper来显示id值。 默认HtmlHelper显示ModelState值而不是Model。 尝试在视图中显示模型值
<td>
@Model.id
</td>
控制器中的或Clean ModelState值
ModelState.Clear();
或在SaveChange之后重置id值。
theCar.Save();
ModelState["id"].Value = theCar.id
return View(theCar);
答案 1 :(得分:17)
我将ModelState.Clear()
添加到我的HttpPost控制器方法中,如本文Html helpers get data from model state and not from model if you return the same view after form post. to get updated data in the view use post redirect get pattern or ModelState.Clear()
中所示,它解决了问题。
谢谢
答案 2 :(得分:2)
我不想清除ModelState,因为我需要显示错误,所以我选择了
ValueProviderResult vpr = new ValueProviderResult("", null, System.Globalization.CultureInfo.CurrentCulture);
ModelState["id"].Value = vpr;