LoginModel RememberMe被标记为必填字段

时间:2014-05-02 12:03:37

标签: asp.net asp.net-mvc asp.net-mvc-4

我正在使用asp.net mvc web应用程序中的LoginModel,如下所示: -

public class LoginModel
{
    [Required(ErrorMessage = "Required")]
    [Display(Name = "User name")]
    public string UserName { get; set; }

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

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

但生成的加价如下: -

<div class="input-prepend">
    Remember Me ?  &nbsp;&nbsp;<input data-val="true" data-val-required="The Remember me? field is required." id="RememberMe" name="RememberMe" type="checkbox" value="true" /><input name="RememberMe" type="hidden" value="false" />
</div>

那么为什么将RememberMe标记为必填字段,尽管在模型类中没有指定[Required]数据注释?

1 个答案:

答案 0 :(得分:3)

更改属性以使用nullable bool:

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

通过这种方式,您声明没有赋予此属性的值,这意味着它可以是可选的。通过使用普通bool,MVC呈现所需的错误,因为该属性必须为true或false。

编辑:

根据您的评论,似乎RememberMe不应该是可选的,因为NULL值不令人满意。在这方面,将RememberMe作为bool是可行的方法。是的,您将获得HTML中的data-val-required内容,但听起来很不错。

编辑: 好的,我知道你来自哪里。您真的不想在Remember Me复选框旁边显示红色星号,那么您必须将RememberMe属性定义为bool?

然后,当用户提交数据时,如果RememberMe.Value is null,您是否可以手动将RememberMe.Value设置为false?因为如果用户没有勾选方框,这意味着他们不希望网站记住它们。如果您可以自己将值设置为false,那么您不会将NULL传递给SetAuthCookie,那么您就可以了。