使用ASP.NET MVC登录页面。我正在使用DevExtreme小部件。当我输入用户名/密码并单击“登录”按钮时,控件将转到“登录”操作,我看到ModelState.IsValid
是false
,
原因是,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>
总是需要一个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())