【发布时间】:2018-05-30 19:22:19
【问题描述】:
在 ASP.NET MVC 登录页面上工作。我正在使用 DevExtreme 小部件。
当我输入用户名/密码并单击登录按钮时,控件进入登录操作,我看到 ModelState.IsValid 是 false,
原因是,ModelState 显示错误:
还记得我吗?字段为必填项。
我检查了我的 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>
【问题讨论】:
-
可能发生的唯一原因是您在表单中输入了
name="RememberMe",但您已将其值设置为null(或true或false以外的其他值) - 并且始终需要bool(不能是null) -
你是对的,复选框初始化为null,我将constructore添加到我的ViewMode并用false初始化该字段,但仍然在Html中我看到初始值为null。那就是问题所在。感谢提示
-
我不是通灵者 :) - 显示你的代码。
-
我添加了一些代码
-
我不知道如何在 Razor 页面中为它初始化一个值
标签: asp.net-mvc entity-framework modelstate