我不确定我是否忽略了一些明显的东西。 一旦我做了一个POST,我就有以下内容(注意:我正在尝试做的是默认具有一些空值的相同视图,以便用户可以创建另一个条目):
[HttpPost]
public ActionResult QkInsert(ProgInfo model)
{
if (ModelState.IsValid)
{
ProgService.InsertQuickEntry(model);
model.Name = null;
model.Address = null;
model.Phone = null;
return view(model);
}
return view(model);
奇怪的是,当我在 IsValid() 中查看模型的值时
return view(model)
我确实看到了空值。 但是当它显示在视图上时,它不是空的。它与我第一次输入数据时的视图基本相同。知道吗?我忽略了什么吗?
还要注意我是如何两次返回视图(模型)的。有没有其他方法可以做到这一点,我只做一次而不重复?
这是因为 HTML 帮助程序在绑定其值时首先查看 ModelState,然后才查看模型中的值。这是设计使然。
因此,如果要在 POST 操作中更改模型的任何值,则需要先将其从模型状态中删除:
[HttpPost]
public ActionResult QkInsert(ProgInfo model)
{
if (ModelState.IsValid)
{
ProgService.InsertQuickEntry(model);
ModelState.Remove("Name");
ModelState.Remove("Address");
ModelState.Remove("Phone");
model.Name = null;
model.Address = null;
model.Phone = null;
return view(model);
}
....
}
现在,视图将呈现修改后的值。
如果模型无效,您将返回相同的模型,即第二次返回。
第一个return view(model)
根本不需要,因为它和第二个之间没有代码,所以它无论如何都会调用。 也就是说,删除第一个返回,逻辑是相同的。