【问题标题】:Compare validator is always firing off even when the passwords are the same即使密码相同,比较验证器也总是启动
【发布时间】:2011-10-29 07:51:44
【问题描述】:

这就是原因。这是生成的 HTML:

    <div>
        <label for="RegisterModel_Password">Contrase&#241;a</label>
        <input class="text-box single-line password" data-val="true" data-val-length="Su Contrase&amp;#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&amp;#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&#241;a</label>
        <input class="text-box single-line password" data-val="true" data-val-equalto="Sus contrase&amp;#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 的 *View*Model。

这个工作默认的 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>

【问题讨论】:

  • 刚刚确认这是我怀疑的原因。我将所有内容都移动到单个模型而不是 ViewModel 中(我应该正确地这样做),jQuery 验证库正确地完成了它的工作。我想知道这是否是一个错误?

标签: asp.net-mvc-3 unobtrusive-javascript


【解决方案1】:

你好,我和你有同样的问题。发生这种情况是因为执行验证的 javascript 文件存在错误。这是您必须解决的问题。

http://forums.asp.net/t/1716181.aspx/1

在最小化版本中找到并不难,这是我必须更改的。

致敬!

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,不幸的是,上面的答案并没有为我解决。解决它的方法是确保我将 [Required] 和 [StringLength(.....] 属性应用于密码和确认密码字段。我还必须将比较属性应用于密码字段,而不是 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; }
    

    【讨论】:

      【解决方案3】:

      而不是使用

      @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">
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        • 2014-05-12
        • 2021-05-31
        • 1970-01-01
        • 2019-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多