ModelState.IsValid返回false时如何保留文本框输入值?
解决ModelState.IsValid为false时保留文本框值的问题
当ModelState.IsValid返回false(比如验证码输入错误)时,要保留文本框中的输入值,核心操作是验证失败后返回视图时,将用户提交的模型对象传递回视图,ASP.NET Core的asp-for标签助手会自动完成值的回填。
具体实现:
修正控制器逻辑:
不要在验证失败后做空处理,必须把接收的模型实例传回视图。示例代码如下:[HttpPost] public IActionResult YourAction(YourModel model) { // 验证码验证逻辑,验证失败时添加ModelState错误 if (!ValidateCaptcha()) { ModelState.AddModelError("Captcha", "验证码输入错误"); } if (ModelState.IsValid) { // 验证通过后的业务逻辑,例如保存数据 return RedirectToAction("Success"); } // 关键:验证失败时返回视图并传入模型,asp-for会自动填充之前的输入值 return View(model); }视图保持现状即可:
你当前的视图已经使用了asp-for="FirstName"和asp-for="LastName",这已经满足自动回填的要求,无需手动为input添加value属性。
背后的机制:
ASP.NET Core渲染asp-for标签时,会按以下优先级读取值:
- 优先读取
ModelState中的值(用户提交的原始输入,即使验证失败也会被保留) - 若
ModelState中无对应值,再读取模型对象的属性值 - 最后使用默认值
只要保证验证失败时将模型传回视图,框架就会自动把用户之前输入的FirstName、LastName回填到对应文本框中。
内容的提问来源于stack exchange,提问作者cr7oo
相关产品推荐
相关产品推荐

