【问题标题】:Why Remember me is Required为什么需要记住我
【发布时间】:2018-05-30 19:22:19
【问题描述】:

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

原因是,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(或truefalse以外的其他值) - 并且始终需要 bool(不能是 null
  • 你是对的,复选框初始化为null,我将constructore添加到我的ViewMode并用false初始化该字段,但仍然在Html中我看到初始值为null。那就是问题所在。感谢提示
  • 我不是通灵者 :) - 显示你的代码。
  • 我添加了一些代码
  • 我不知道如何在 Razor 页面中为它初始化一个值

标签: asp.net-mvc entity-framework modelstate


【解决方案1】:

bool 属性始终是必需的(它不能是 null,除非它的 bool?)。

除非你专门设置了 DevExtreme CheckBoxFor() 方法的.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())

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 2015-09-19
    • 2011-03-05
    • 2019-06-09
    • 2012-05-21
    • 2013-02-20
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多