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

ASP.NET Core 6.0 MVC提交表单后如何保留用户输入值?

解决ASP.NET Core 6 MVC + Identity注册页面验证错误时表单值丢失问题

核心问题分析

你遇到的表单值清空问题,主要来自两个常见原因:

  1. [Bind]属性的字段列表未完全覆盖表单中需要保留值的属性,导致部分属性未被正确绑定到模型
  2. 使用RedirectToAction返回错误视图(重定向会丢失表单数据与ModelState)

另外需要注意:密码输入框(type="password")因浏览器安全机制,验证错误时默认不会保留输入值,这是正常现象,无需处理。

具体解决方案

1. 确保[Bind]包含所有表单字段

检查你的[Bind]属性参数,必须包含表单中所有需要保留值的属性(比如用户名、邮箱等,密码字段除外)。

示例修正后的Action代码:

[HttpPost]
public async Task<IActionResult> Register(
    [Bind("Username, Email, Password, ConfirmPassword")] RegisterViewModel model)
{
    if (!ModelState.IsValid)
    {
        // 直接返回绑定后的模型视图,不要用重定向
        return View(model);
    }

    // Identity注册逻辑
    var user = new IdentityUser { UserName = model.Username, Email = model.Email };
    var result = await _userManager.CreateAsync(user, model.Password);
    if (result.Succeeded)
    {
        // 注册成功后的重定向逻辑
        return RedirectToAction("Index", "Home");
    }
    foreach (var error in result.Errors)
    {
        ModelState.AddModelError(string.Empty, error.Description);
    }
    // 注册失败(Identity返回的错误),同样返回原模型视图
    return View(model);
}

2. 禁止使用RedirectToAction返回错误视图

RedirectToAction会发起全新的GET请求,原表单数据和ModelState都会丢失,必须直接使用return View(model)返回当前视图,这样模型中的已绑定属性才能被视图正确渲染。

3. 检查视图与模型的属性对应关系

确保视图中asp-for指令的属性名与模型类的属性名完全一致(C#大小写敏感):

@model RegisterViewModel

<form asp-action="Register">
    <div class="form-group">
        <label asp-for="Username"></label>
        <input asp-for="Username" class="form-control" />
        <span asp-validation-for="Username" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Email"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
    <!-- 密码输入框验证错误时会清空,属于浏览器默认行为 -->
    <div class="form-group">
        <label asp-for="Password"></label>
        <input asp-for="Password" class="form-control" />
        <span asp-validation-for="Password" class="text-danger"></span>
    </div>
    <button type="submit" class="btn btn-primary">注册</button>
</form>

4. 排查Identity额外验证导致的ModelState错误

如果上述步骤都正确,但问题依然存在,检查是否是Identity的CreateAsync返回错误后,你添加的全局ModelState错误影响了绑定。此时只需确保在添加错误后依然返回原模型即可,如上面代码所示。

总结

  • 确保[Bind]覆盖所有需要保留值的表单字段
  • 验证失败时直接返回View(model),禁止重定向
  • 密码字段清空是浏览器安全机制,无需处理
  • 核对视图与模型的属性名称一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:00:58