C# 为什么数据类型。密码只在服务器端验证?

C# 为什么数据类型。密码只在服务器端验证?,c#,.net,asp.net-mvc,validation,data-annotations,C#,.net,Asp.net Mvc,Validation,Data Annotations,我有模特儿 [Required] [EmailAddress] [Remote("EmailValidation", "Account", ErrorMessage = "{0} already has an account, please enter a different email address.")] [Display(Name = "Email")] public string Email { get; set; } [Required] [StringLength(100, Er

我有模特儿

[Required]
[EmailAddress]
[Remote("EmailValidation", "Account", ErrorMessage = "{0} already has an account, please enter a different email address.")]
[Display(Name = "Email")]
public string Email { get; set; }

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
注册表格如下:

<form id="registrationForm">
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, String.Empty, new { @class = "text-danger text-center" })
    @Html.HiddenFor(m => m.ForModal, new { @Value = true })
    <div class="form-group text-center">
        <div class="input-group margin-top-10 margin-bottom-5">
            <span class="input-group-addon"><i class="fa fa-user"></i></span>
            @Html.TextBoxFor(m => m.Email, new { @class = "form-control", placeholder = "Email", @readonly = "readonly" })
        </div>
        @Html.ValidationMessageFor(m => m.Email, null, new { @class = "text-danger" })
        <div class="input-group margin-top-10 margin-bottom-5">
            <span class="input-group-addon"><i class="fa fa-lock"></i></span>
            @Html.PasswordFor(m => m.Password, new { @class = "form-control", placeholder = "Password" })
        </div>
        @Html.ValidationMessageFor(m => m.Password, null, new { @class = "text-danger" })
        <div class="input-group margin-top-10 margin-bottom-5">
            <span class="input-group-addon"><i class="fa fa-lock"></i></span>
            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control", placeholder = "Confirm Password" })
        </div>
        @Html.ValidationMessageFor(m => m.ConfirmPassword, null, new { @class = "text-danger" })
    </div>
    <div class="text-right">
        <button type="submit" class="btn-u btn-u-orange btn-u-wide" title="Join">Join</button>
    </div>
</form>

@Html.AntiForgeryToken()
@Html.ValidationSummary(true,String.Empty,new{@class=“text danger text center”})
@HiddenFor(m=>m.ForModal,new{@Value=true})
@Html.TextBoxFor(m=>m.Email,新的{@class=“form control”,placeholder=“Email”,“@readonly=“readonly”})
@Html.ValidationMessageFor(m=>m.Email,null,新{@class=“text danger”})
@Html.PasswordFor(m=>m.Password,新的{@class=“form control”,placeholder=“Password”})
@Html.ValidationMessageFor(m=>m.Password,null,新{@class=“text danger”})
@PasswordFor(m=>m.ConfirmPassword,新的{@class=“form control”,placeholder=“Confirm Password”})
@Html.ValidationMessageFor(m=>m.ConfirmPassword,null,new{@class=“text danger”})
参加
当我键入短密码时,会触发验证,当我键入ConfirpPassword时,会触发不同的密码-验证,但当我只键入数字作为
123456
时,客户端不会发生任何事情,只是在服务器端,毕竟我得到了错误

(截图链接)

为什么我可以在客户端获取验证数据类型.密码



当我在互联网上搜索这类问题时,我得到的解决方案是
使用Html.PasswordFor或Html.EditorFor,而不是Html.TextBoxFor

数据类型
属性不用于即时验证,它主要用于渲染。例如,如果使用
EditorFor
在内部呈现属性,它将使用
DataType
属性来确定应该呈现的输入类型,即
PasswordFor
基本上做相同的事情,但不需要
DataType
属性


长度验证在客户端工作,因为这是由
StringLength
属性而不是
DataType
处理的。如果您想强制执行特定的数据类型验证,我建议您考虑使用,除此之外,您将考虑实施您自己的验证。

所需的验证是否在客户端工作?@Batavia,是的。您可以在sceenshot上看到它,然后服务器端的密码验证是什么?从我可以看到,您的密码上有两个验证规则-它不能为空,必须至少有6个字符长,没有其他验证(除非您在后端执行我们看不到的操作)。但是,错误消息本身表明您的密码甚至没有到达服务器,因为验证错误表明密码丢失。比较验证器是应该进行比较的验证器,没有理由不能在客户端执行此操作case@Batavia我的答案不是说比较,OP所说的是当他们只键入数字时,没有启动客户端验证……原因是没有相应的验证规则。就验证器而言,
123456
既是一个值,因此至少6个字符的长度被认为是可以接受的。@James,很抱歉,你是wright!“验证”来自AspNet.Identity.Core的UserManager。