Asp.net mvc 在ModelState检查和返回视图期间ASP.NET核心更改模型

Asp.net mvc 在ModelState检查和返回视图期间ASP.NET核心更改模型,asp.net-mvc,asp.net-core,modelstate,Asp.net Mvc,Asp.net Core,Modelstate,在ModelState.IsValid检查期间,我需要更改模型的属性,然后返回视图。我的方法是这样的: [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> SaveProject(MainProjectViewModel model, string id = null) { if (string.IsNullOrEmpty(id))

在ModelState.IsValid检查期间,我需要更改模型的属性,然后返回视图。我的方法是这样的:

[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 });
        }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务SaveProject(MainProjectViewModel模型,字符串id=null)
{
if(string.IsNullOrEmpty(id))
{
如果(!ModelState.IsValid)
{    
bool validClientCheck=this.checkifclientnameanddarefalid(model.ProjectModel.ClientName,model.ProjectModel.ClientId);
如果(!validClientCheck)
{
ModelState.AddModelError(“ProjectModel.ClientId”,“请选择一个有效的客户端!”);
model.ProjectModel.ClientId=null;
}
返回视图(模型);
}
等待这个.projectService.SaveProject(model,“create”);
}
返回RedirectToAction(“保存项目”、“项目”,新的{id=model.ProjectModel.id});
}

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

当使用
ModelState进行验证时,视图中的模型绑定并不简单。
对于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);
       
    

正是我需要的!谢谢!