Razor 为同一元素生成两个输入标签

本文关键字:两个 标签 输入 元素 Razor | 更新日期: 2023-09-27 18:31:26

我有一个简单的登录表单,我通过 Razor 渲染如下 -

<div class="row">
            @Html.TextBoxFor(m => m.EMail, htmlAttributes: new { @class = "form-control", placeholder = "E-Mail" })
            @Html.PasswordFor(m => m.Password, htmlAttributes: new { @class = "form-control", placeholder = "Password" })
            @Html.CheckBoxFor(m => m.RememberMe, htmlAttributes: new {@class = "form-control", value="1", @checked = "1"})
            <input type="button" class="btn btn-sm btn-primary" id="signinbutton" value="Sign In" />
</div>

它在页面上正确呈现,但是当我尝试序列化它时,这是输出 -

EMail=Sam&Password=sam&RememberMe=1&RememberMe=false

RememberMe在上面被序列化了两次。

当我深入研究生成的 html 时,输入字段生成了两次 -

<input checked="1" data-val="true" data-val-required="The RememberMe field is required." id="RememberMe" name="RememberMe" type="checkbox" value="1">
<input name="RememberMe" type="hidden" value="false">

看起来很奇怪。我不确定为什么会发生这种情况。有什么想法吗?

Razor 为同一元素生成两个输入标签

这是有意为之的,因为空复选框不会作为任何内容提交。要提交假值,如果未选中该复选框,则将读取隐藏的输入。

请参阅此处了解更多信息。