我有一个用于添加简单实体的MVC表单。我正在使用TextBoxFor(model => model.FieldName)来创建输入字段。我有一个Save按钮和Save and New按钮。 “保存”和“新建”按钮应该回发到“保存”操作,然后使用空模型返回当前视图,以使用户能够添加另一个实体。但是,发生的情况是,即使模型确实为空,也会使用为前一个实体输入的值生成输入字段。希望这是有道理的。
我知道我可以进行重定向,但这似乎是一个丑陋的解决方法,所以如果有人之前遇到过这种情况,我真的很感激一些意见。
感谢。
答案 0 :(得分:13)
此处的问题是,即使ViewData.ModelState
为空且您未明确将任何值传递到视图中,您的Model
仍会使用原始帖子中的值进行填充。
我实际上并不认为重定向到原始操作是丑陋的解决方案,但如果您不想这样做,那么清除ViewData
应该适合您:
[HttpPost]
public ActionResult Save(TestModel model)
{
ViewData = null;
return View();
}
答案 1 :(得分:5)
我建议使用
ModelState.Clear();
而不是
ViewData = null;
因为我发现你要做的事情要清楚得多。虽然两者都能完成你想要做的事情。
答案 2 :(得分:1)
我有同样的问题,请看这里:
Updating value provider prior to TryUpdateModel
然而 - 在发布后 - 如果成功,您应该按设计重定向到GET操作以获取下一个数据。这是mvc要使用的PRG(重定向后获取)模式的一部分。帮助者假设您正在使用此模式,如果您在帖子后显示信息,则必须出现错误,以便重新显示已发布的值以进行“更正”。尽量不要解决这个问题 - 但重构代码以正确使用PRG。