MVC C# 返回 view() 不默认为正确的值



我不确定我是否忽略了一些明显的东西。 一旦我做了一个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)根本不需要,因为它和第二个之间没有代码,所以它无论如何都会调用。 也就是说,删除第一个返回,逻辑是相同的。

最新更新