即使密码相同,比较验证器也始终关闭
问题描述:
以下是原因。这是生成的HTML:即使密码相同,比较验证器也始终关闭
<div>
<label for="RegisterModel_Password">Contraseña</label>
<input class="text-box single-line password" data-val="true" data-val-length="Su Contrase&#241;a debe tener al menos 6 caracteres." data-val-length-max="100" data-val-length-min="6" data-val-required="Debe escribir su contrase&#241;a" id="RegisterModel_Password" name="RegisterModel.Password" type="password" value="" />
<span class="field-validation-valid" data-valmsg-for="RegisterModel.Password" data-valmsg-replace="true"></span>
</div>
<div>
<label for="RegisterModel_ConfirmPassword">Confirme Su Contraseña</label>
<input class="text-box single-line password" data-val="true" data-val-equalto="Sus contrase&#241;as no son las mismas." data-val-equalto-other="*.Password" id="RegisterModel_ConfirmPassword" name="RegisterModel.ConfirmPassword" type="password" value="" />
<span class="field-validation-valid" data-valmsg-for="RegisterModel.ConfirmPassword" data-valmsg-replace="true"></span>
</div>
注意到这一点,在确认密码框中:
data-val-equalto-other="*.Password"
这应该是RegisterModel.Password
,因为我猜的JavaScript看起来像一个名为“RegisterModel输入.Password“,不是?
这里是我的模型代码:
[Required(ErrorMessage = "Debe escribir su contraseña")]
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Contraseña")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirme Su Contraseña")]
[Compare("Password", ErrorMessage = "Sus contraseñas no son las mismas.")]
public string ConfirmPassword { get; set; }
上为什么发生这种情况的任何想法?
刚刚创建了一个全新的应用MVC3,这是模型:
[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")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
和验证工作。这里唯一的区别是它们直接在视图中使用模型,而我传递一个* 查看 *包含该模型的RegisterModel。
这个工作默认的HTML是不同的,虽然到我的:
<div class="editor-field">
<input data-val="true" data-val-length="The Password must be at least 6 characters long." data-val-length-max="100" data-val-length-min="6" data-val-required="The Password field is required." id="Password" name="Password" type="password" />
<span class="field-validation-valid" data-valmsg-for="Password" data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="ConfirmPassword">Confirm password</label>
</div>
<div class="editor-field">
<input data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="*.Password" id="ConfirmPassword" name="ConfirmPassword" type="password" />
<span class="field-validation-valid" data-valmsg-for="ConfirmPassword" data-valmsg-replace="true"></span>
</div>
答
您好,我有同样的问题比你。发生这种情况是因为执行验证的JavaScript文件存在错误。这是你必须解决的问题。
http://forums.asp.net/t/1716181.aspx/1
这并不是说很难在最小化的版本,这是我不得不改变什么发现。
Saludos!
答
我有同样的问题,上面的答案并没有解决它不幸的。解决方法是确保我将[Required]和[StringLength(.....] Atrributes同时应用于密码和确认密码字段。我还必须将Compare属性应用于密码字段,而不是ConfirmPassword场。
因此,与上面的模型,
[Required(ErrorMessage = "Debe escribir su contraseña")]
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Contraseña")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirme Su Contraseña")]
[Compare("Password", ErrorMessage = "Sus contraseñas no son las mismas.")]
public string ConfirmPassword { get; set; }
变为
[Required(ErrorMessage = "Debe escribir su contraseña")]
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Contraseña")]
[Compare("ConfirmPassword", ErrorMessage = "Sus contraseñas no son las mismas.")]
public string Password { get; set; }
[Required(ErrorMessage = "Debe escribir su contraseña")]
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Confirme Su Contraseña")]
public string ConfirmPassword { get; set; }
答
而不是使用
@Html.PasswordFor(m => m.RegisterModel.RegisterConfirmPassword)
其输出
<input data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="RegisterModel.RegisterPassword" id="RegisterModel_RegisterConfirmPassword" name="RegisterModel.RegisterConfirmPassword" type="password">
我把上面的输出,并添加单引号括起来“‘RegisterModel.RegisterPassword’”
<input data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="'RegisterModel.RegisterPassword'" id="RegisterModel_RegisterConfirmPassword" name="RegisterModel.RegisterConfirmPassword" type="password">
只是确认这由什么原因引起我怀疑。我把所有东西都移到了一个模型中,而不是ViewModel(正如我应该正确的那样),jQuery验证库确实能够正常工作。我不知道这是否是一个错误? –