为什么要记住我是必需的

问题描述 投票:0回答:1

使用ASP.NET MVC登录页面。我正在使用DevExtreme小部件。当我输入用户名/密码并单击“登录”按钮时,控件将转到“登录”操作,我看到ModelState.IsValidfalse

原因是,ModelState显示错误:

记住我吗?字段是必需的。

我检查了我的ViewModel,我发现它没有根据需要标记该字段。奇怪的是,当我第二次点击“登录”按钮时,它工作正常,ModelState.IsValid为真!

这是我的ViewMode

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>
asp.net-mvc entity-framework modelstate
1个回答
1
投票

总是需要一个bool属性(它不能是null,除非它的bool?)。

除非您专门设置DevExtreme .Value()方法的CheckBoxFor()属性,否则它将使用value="null" in the hidden input that is generated by the plugin进行初始化。如果你没有点击复选框,那么将发布null并导致ModelState有效。

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

@Html.DevExtreme().CheckBoxFor(m => m.RememberMe)
    .Value(Model.RememberMe)
    .Text(Html.DisplayNameFor(m => m.RememberMe).ToString())
© www.soinside.com 2019 - 2024. All rights reserved.