【问题标题】:View not updating after post发帖后查看不更新
【发布时间】:2012-03-10 09:48:09
【问题描述】:

我有一个控制器方法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() 后调试并观察 car 的值,则 id 是正确的。但是当视图呈现时,视图中的 ID 为 0。

谁能帮助我,告诉我为什么会发生这种情况。我不打算在 HTTP POST 方法中更改视图的模型吗?如果保存成功,我是否应该重定向到原始的 CreateOrUpdate() 方法。

【问题讨论】:

  • 尝试不使用theCar.Save(); 行。
  • theCar.Save() 只保存模型。这不是问题。即使我在 HttpPost 方法中设置了类的属性,也没有 theCar.Save() 方法。该属性未反映在视图中
  • 仅供参考:如果您已成功保存数据并希望重新显示页面,则可能需要遵循 Post/Redirect/Get 模式。 en.wikipedia.org/wiki/Post/Redirect/Get

标签: c# asp.net-mvc-3 http-post


【解决方案1】:

应该是ModelState问题。 如果您使用 Htmlhelper 来显示 id 值。 默认 HtmlHelper 显示 ModelState 值而不是 Model。 尝试在视图中显示模型值

<td>
    @Model.id
</td>

或清除控制器中的 ModelState 值

ModelState.Clear();

或者在 SaveChange 之后重置 id 值。

theCar.Save();
ModelState["id"].Value = theCar.id
return View(theCar);

Reset the value of textarea after form submission

【讨论】:

  • ModelState["MyModelProperty"].Value = null; 结合model.MyModelProperty = null; (用于状态维护)解决了我的问题。谢谢你!
  • 这件事困扰我很久了,ModelState.Clear() 帮我做了,谢谢!
  • 在我看来是 mvc 中的可怕错误
  • 请注意,ModelState.Clear(); 也会清除 ModelState 中的所有验证结果。如果您想保留验证结果,请参阅下方 Michael 的建议。
【解决方案2】:

我在我的 HttpPost 控制器方法中添加了ModelState.Clear(),正如这篇文章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() 中所见,它解决了问题。

谢谢

【讨论】:

    【解决方案3】:

    我不想清除 ModelState,因为我需要显示错误,所以我选择了

    ValueProviderResult vpr = new ValueProviderResult("", null, System.Globalization.CultureInfo.CurrentCulture);
    
    ModelState["id"].Value = vpr;
    

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多