所以这很奇怪。我有一个由List<person>
和person
组成的模型。当用户将视图提交回控制器时,List<person>
会添加到person
,然后我们会通过person=new Person();
清除所有person
字段。< / p>
我希望在返回视图时,清除所有person
字段,并且视图是&#34;新鲜&#34;开始。但是,由于某些原因我无法弄清楚,person=new Person();
的大多数字段仍然填充了之前的值(即使在 [HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult sendInscriptorRequest(inscriptionModel _model)
{
var _umbracoModel = Umbraco.TypedContentAtRoot().FirstOrDefault();
_model = bllInscripcion.fillModel(_model);
_model = _model.Map(_umbracoModel);
if (_model.formAction == "addParticipants")
{
_model.participants.Add(_model.newParticipant);
_model.newParticipant = new participantModel();
_model.ui.participants.btnTotalParticipantsNumber += 1;
return View("addParticipants", _model);
}
else
{
_model.newParticipant = bllInscripcion.preFillParticipantContactWithInscriptorContact(_model);
return View("formularioInscripcion2", _model);
}
}
之后)。
模型是一个复杂的模型,由几个对象对象组成,一些对象继承自其他对象。不过,我无法理解为什么视图仍会显示以前帖子中的值。
编辑!!!!!
我通过常规表单发布(HTML.BeginForm())。所以这是我的控制器:
dependencies {
testCompile(group: 'org.neo4j',
name: 'neo4j-ogm-test',
version: '1.0.0.BUILD-SNAPSHOT',
classifier: 'tests')
}
repositories {
maven {
url 'http://repo.spring.io/libs-snapshot-continuous-local'
}
}
答案 0 :(得分:3)
您尝试使用POST
操作方法中的模型返回视图。这不会起作用,因为预期的行为是返回已发布的模型状态,以便用户可以进行更正。
如果您要发布数据,然后想要返回空视图,则应重定向到返回视图初始状态的GET
操作方法。它被称为Post-Redirect-Get模式。
http://en.wikipedia.org/wiki/Post/Redirect/Get
遵循此模式还可以解决用户在POST
之后刷新页面的问题,并获得说出&#34;您即将重新提交数据的恼人对话框。你确定吗?&#34;用户总是回应&#34;是&#34;然后你的系统必须处理潜在的重复。
答案 1 :(得分:2)
问题说明:
这是因为server.log
。默认情况下,如果您返回相同的视图,MVC将在后期操作中保留模型状态。要防止这种情况,只需在返回视图之前清除它:
ModelState
这意味着将使用您传回视图的任何模型,而不是存储在模型状态中的模型。
<强>声明:强>
您应该仅在需要时使用ModelState.Clear();
。根据您的代码判断,您不需要使用它。在执行必要的逻辑后,简单地重定向到另一个页面是更好的事情(根据PRG模式)。