使用[比较("",..)]比较新密码和确认新密码在MVC3,Razor中使用数据注释时不起作用

时间:2012-11-19 05:22:40

标签: jquery asp.net-mvc-3 compare client-side-validation data-annotations

我在@using(Ajax.BeginForm()){---}中有三个PasswordFor,oldpassword,newpassword和confirmnewpassword,我需要这些以模型为界的值,需要在客户端验证newpassword和confirmnewpassword的值使用数据注释。我使用[Compare(“newpassword”,errormessage =“error message ---”(]来比较newpassword和confirmnewpassword的值。 当我只使用两个PasswordFor for newpassword和confirmnewpassword时,[Compare(“newpassword”),..]工作正常但是当在Ajax.BeginForm中也使用了oldpassword的密码时,Compare验证不起作用。我需要将所有这三个值通过模型传递给我的控制器,并且我无法以相同的形式使用这三个框来比较newpassword和confirmnewpassword。 如果在BeginForm()之外获取oldpassword,则比较有效但oldpassword的值未使用数据注释验证,并且其值未通过模型传递给控制器​​。 我需要的是让这个[Compare()]工作,而我在Ajax.BeginForm中拥有所有这三个PasswordFor,并且在我的所有验证都在客户端验证之前它不会被提交。 任何帮助将受到高度赞赏。

我的观点:

@model eremit.Models.CustomerAll
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.debug.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js")" type="text/javascript"></script>


@using (Ajax.BeginForm("verifycustomer", "CustomerLogin", new AjaxOptions { UpdateTargetId = "messagediv" }))
                {
                    @Html.ValidationSummary(true)


                        <h3>Old password</h3>@Html.PasswordFor(model => model.Login.oldpassword)
                        @Html.ValidationMessageFor(model => model.Login.oldpassword)

                     <h3>New password</h3>@Html.PasswordFor(model => model.Login.newpassword)
                        @Html.ValidationMessageFor(model => model.Login.newpassword)

                        <h3>

                            Re-enter New password</h3>@Html.PasswordFor(model => model.Login.confirmnewpassword)
                        @Html.ValidationMessageFor(model => model.Login.confirmnewpassword)


                        <div id="messagediv">
                        </div>

                            <input type="submit" id="btnchangepassword" value="Change Password" />

我的模特:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Web.Mvc;
using System.Web.Security;

namespace eremit.Models
{
    public class Login
    {
    [Required(ErrorMessage = "* Please enter old password")]
    public string oldpassword { get; set; }

    [Required(ErrorMessage = "* Please enter new password")]
    [Display(Name = "newpassword")]
    [RegularExpression("^[a-zA-Z<>$@#!%&_0-9]+$", ErrorMessage = "Invalid Password")]
    public string newpassword { get; set; }

    [Required(ErrorMessage = "* Re-enter your new password")]
    [Compare("newpassword", ErrorMessage = "The new password and confirmation password     do not match.")]
    public string confirmnewpassword { get; set; }
}
}

1 个答案:

答案 0 :(得分:2)

自MVC 3推出以来,Microsoft库(如 MicrosoftAjax.js MicrosoftMvcAjax.js MicrosoftMvcValidation.js )已过时。< / p>

这些库被 jquery.validate.min.js jquery.unobtrusive-ajax.min.js jquery.validate.unobtrusive.min取代.js 作为MVC3的一部分。只需评论微软助手并尝试。

MicrosoftAjax.js
MicrosoftAjax.debug.js
MicrosoftMvcAjax.js
MicrosoftMvcAjax.debug.js