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

Razor Page提交表单后保留Password输入框值的问题求助

解决ASP.NET Core Razor页面提交后保留Password输入框值的问题

问题原因

ASP.NET Core的Input TagHelper出于安全考量,默认不会为type="password"的输入框渲染value属性——哪怕你的LoginViewModel中Password字段已有值。而type="text"的输入框则会正常渲染value,这就是两种输入类型表现差异的核心原因。

解决方案

方法一:手动为Password输入框绑定value属性

直接在视图的密码输入标签中,手动指定value属性绑定模型里的Password值,这是最直接的解决方式:

<div class="form-group-with-label login-input-password mb-2">
    <label>Password</label>
    <input class="form-control-input" type="password" asp-for="Input.Password" autocomplete="off" value="@Model.Input.Password" />
    <span class="fa fa-eye" id="togglePassword"></span>
    <span asp-validation-for="Input.Password" class="text-danger"></span>
</div>

注意:仅在登录这类「验证失败后需要保留用户输入」的场景使用,同时务必确保网站启用HTTPS,避免密码在传输或页面渲染环节出现安全风险。

方法二:后端手动维护ModelState(可选)

如果希望通过后端逻辑控制,可以在Post方法返回Page()前,手动将Password值同步到ModelState中(弥补TagHelper的默认限制):

public IActionResult OnPost()
{
    if (!ModelState.IsValid)
    {
        // 手动将Password值写入ModelState,确保视图渲染时能读取到
        ModelState.SetModelValue("Input.Password", new ValueProviderResult(Input.Password, CultureInfo.CurrentCulture));
        return Page();
    }

    // 登录逻辑实现...
    return RedirectToPage("/Index");
}

这种方式相对繁琐,仅在有特殊后端逻辑需求时使用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:42:38