Asp.net mvc 3 即使模型值为空,TextBoxFor Helper也会保留以前的值
我有一个用于添加简单实体的MVC表单。我正在使用TextBoxFor(model=>model.FieldName)创建输入字段。我有一个保存按钮和一个保存和新建按钮。“保存并新建”按钮应该发回“保存”操作,然后返回带有空模型的当前视图,以便用户添加另一个实体。然而,发生的情况是,即使模型确实是空的,输入字段也是使用为前一个实体输入的值生成的。希望这是有意义的 我知道我可以做重定向,但这似乎是一个丑陋的解决办法,所以如果有人以前遇到过这种情况,我真的非常感谢一些意见Asp.net mvc 3 即使模型值为空,TextBoxFor Helper也会保留以前的值,asp.net-mvc-3,Asp.net Mvc 3,我有一个用于添加简单实体的MVC表单。我正在使用TextBoxFor(model=>model.FieldName)创建输入字段。我有一个保存按钮和一个保存和新建按钮。“保存并新建”按钮应该发回“保存”操作,然后返回带有空模型的当前视图,以便用户添加另一个实体。然而,发生的情况是,即使模型确实是空的,输入字段也是使用为前一个实体输入的值生成的。希望这是有意义的 我知道我可以做重定向,但这似乎是一个丑陋的解决办法,所以如果有人以前遇到过这种情况,我真的非常感谢一些意见 谢谢。这里的问题是,您的视图
谢谢。这里的问题是,您的
视图数据.ModelState
仍然使用原始帖子中的值填充,即使模型
为空,并且您没有显式地将任何值传递到视图中
实际上,我并不认为重定向到原始操作是一个丑陋的解决方案,但是如果您不想这样做,那么清除ViewData
应该对您有用:
[HttpPost]
public ActionResult Save(TestModel model)
{
ViewData = null;
return View();
}
我也有同样的问题,请看这里: 但是,如果发布成功,您应该在设计上重定向到下一个数据的GET操作。这是mvc使用的PRG(post redirect get)模式的一部分。帮助程序假定您正在使用此模式,并且如果您在发布后显示信息,则肯定存在错误,因此他们会重新显示发布的值以进行“更正”。尽量不要解决这个问题,但要重构代码以正确使用PRG。我建议使用
ModelState.Clear();
而不是
ViewData = null;
因为我发现你想做的事情更清楚了。尽管两者都能完成您的任务。您能发布一些代码吗?最好是从行动开始。不确定你是否应该发布新的按钮行动。该操作应该是GET请求。这不是效率低下吗?重定向是否会导致从客户机到服务器再到服务器的额外往返?或者RedirectToAction不是这样吗?定义“低效”?这是它设计的工作方式,而且更干净。许多web表单应用程序在回发时显示的数据无法正确反映重新加载数据时的外观。MVC通过重定向回get解决了这个问题。它更干净,而且客户端还可以按f5键,而不会出现客户端不知道的可怕的浏览器警告消息。