我在@using(Ajax.BeginForm()){-中有三个PasswordFor,oldpassword,newpassword和confirmnewpassword,并且我需要将这些值与模型绑定在一起,并且需要newpassword的值并在客户端使用数据注释来确认newpassword的有效性。 。我已经使用[Compare(“ newpassword”,errormessage =“错误消息---”(]来比较newpassword的值并确认newpassword。
当我仅将两个PasswordFor用作newpassword并确认newpassword时,[Compare(“ newpassword”),..]可以正常工作,但是当在Ajax.BeginForm中也使用oldpassword的密码时,Compare验证将不起作用。我需要将所有这三个值通过模型传递到我的控制器,并且我无法以相同的形式使用这三个框来比较newpassword和Confirmnewpassword。
如果将oldpassword带到BeginForm()之外,则可以进行比较,但不会使用数据注释验证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; }
}
}

最佳答案

自从引入MVC 3以来,诸如MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js之类的Microsoft库已过时。

作为MVC3的一部分,这些库被jquery.validate.min.js,jquery.unobtrusive-ajax.min.js和jquery.validate.unobtrusive.min.js取代。只需注释Microsoft助手并尝试。

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

10-02 12:39