You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ModelState.IsValid返回false时如何保留文本框输入值?

解决ModelState.IsValid为false时保留文本框值的问题

当ModelState.IsValid返回false(比如验证码输入错误)时,要保留文本框中的输入值,核心操作是验证失败后返回视图时,将用户提交的模型对象传递回视图,ASP.NET Core的asp-for标签助手会自动完成值的回填。

具体实现:

  1. 修正控制器逻辑:
    不要在验证失败后做空处理,必须把接收的模型实例传回视图。示例代码如下:

    [HttpPost]
    public IActionResult YourAction(YourModel model)
    {
        // 验证码验证逻辑,验证失败时添加ModelState错误
        if (!ValidateCaptcha())
        {
            ModelState.AddModelError("Captcha", "验证码输入错误");
        }
    
        if (ModelState.IsValid)
        {
            // 验证通过后的业务逻辑,例如保存数据
            return RedirectToAction("Success");
        }
    
        // 关键:验证失败时返回视图并传入模型,asp-for会自动填充之前的输入值
        return View(model);
    }
    
  2. 视图保持现状即可:
    你当前的视图已经使用了asp-for="FirstName"和asp-for="LastName",这已经满足自动回填的要求,无需手动为input添加value属性。

背后的机制:

ASP.NET Core渲染asp-for标签时,会按以下优先级读取值:

  • 优先读取ModelState中的值(用户提交的原始输入,即使验证失败也会被保留)
  • 若ModelState中无对应值,再读取模型对象的属性值
  • 最后使用默认值

只要保证验证失败时将模型传回视图,框架就会自动把用户之前输入的FirstName、LastName回填到对应文本框中。


内容的提问来源于stack exchange,提问作者cr7oo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:40:23