ASP.NET Core在ModelState检查期间更改模型并返回View



在ModelState.IsValid检查期间,我需要更改模型的一个属性,然后返回View。以下是我的方法:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> SaveProject(MainProjectViewModel model, string id = null)
{
if (string.IsNullOrEmpty(id))
{
if (!ModelState.IsValid)
{    
bool validClientCheck = this.CheckIfClientNameAndIdAreValid(model.ProjectModel.ClientName, model.ProjectModel.ClientId);
if (!validClientCheck)
{
ModelState.AddModelError("ProjectModel.ClientId", $"Please select a valid client!");
model.ProjectModel.ClientId = null;
}
return View(model);
}
await this.projectService.SaveProject(model, "create");
}
return RedirectToAction("SaveProject", "Project", new { id = model.ProjectModel.Id });
}

即使我在视图中有model.ProjectModel.ClientId = null;,ClientId的隐藏字段仍然填充有客户端id。在将模型返回到视图之前,我如何更改模型?

当您使用ModelState进行验证时,View中的模型绑定并不简单。对于post表单中的特定字段,可以在变量ModelState中使用键来访问它。如果要修改该字段的值,则应修改变量ModelState中的值,而不是页面model中的值。

在您的情况下,您可以添加以下代码:

// Add custom error before the model validation...
ModelState.AddModelError("ProjectModel.ClientId", $"Please select a valid client!");
if (!ModelState.IsValid)
{
// Modify the value to empty
ModelState["ProjectModel.ClientId"].RawValue = "";  //add this line after set model error
}
return View(model);


最新更新