即使模型值为空,TextBoxFor Helper也会保留以前的值

时间:2011-06-02 23:59:09

标签: asp.net-mvc-3

我有一个用于添加简单实体的MVC表单。我正在使用TextBoxFor(model => model.FieldName)来创建输入字段。我有一个Save按钮和Save and New按钮。 “保存”和“新建”按钮应该回发到“保存”操作,然后使用空模型返回当前视图,以使用户能够添加另一个实体。但是,发生的情况是,即使模型确实为空,也会使用为前一个实体输入的值生成输入字段。希望这是有道理的。

我知道我可以进行重定向,但这似乎是一个丑陋的解决方法,所以如果有人之前遇到过这种情况,我真的很感激一些意见。

感谢。

3 个答案:

答案 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。