我在@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; }
}
}
答案 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