为什么需要记住我

Why Remember me is Required

正在处理 ASP.NET MVC 登录页面。我正在使用 DevExtreme 小部件。 当我输入 username/password 并单击登录按钮时,控件转到登录操作,我看到 ModelState.IsValidfalse

原因是,ModelState显示错误:

The Remember me? field is required.

我检查了我的 ViewModel,发现它没有按要求标记该字段。奇怪的是,当我第二次点击登录按钮时,它起作用了而且 ModelState.IsValid 是真的!!

这是我的视图模式

public class LoginViewModel
{
    [Required]
    [Display(Name = "Email")]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

问题是,为什么需要它以及为什么它在第二次点击时起作用。

这是我认为的代码

@Html.DevExtreme().CheckBoxFor(m => m.RememberMe).Text(Html.DisplayNameFor(m => m.RememberMe).ToString())

这是html源代码

中的代码
<div id="devextreme2"></div>
<script>
    jQuery(function($){
        $("#devextreme2").dxCheckBox({
            "name": "RememberMe",
            "value": null, 
            "text":"Remember me?",
            "inputAttr": {"id":"RememberMe"}
        });
    });
</script>

A bool 属性 总是必需的(它不能是 null 除非它是 bool?)。

除非你专门设置了DevExtremeCheckBoxFor()方法的.Value()属性,否则都是用value="null" in the hidden input that is generated by the plugin初始化的。如果您不单击该复选框,则会发布 null 并导致 ModelState 有效。

假设您在 GET 方法中将 LoginViewModel 的实例传递给视图,那么您可以使用

设置默认值
@Html.DevExtreme().CheckBoxFor(m => m.RememberMe)
    .Value(Model.RememberMe)
    .Text(Html.DisplayNameFor(m => m.RememberMe).ToString())