我正在使用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 ? <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]数据注释?
答案 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,那么您就可以了。