2011-06-13 72 views
1

这是很基本的,但它总是返回的比较验证错误。任何人都遇到这个问题?是比较验证窃听

public class UsersRegisterUserViewModel 
{ 
    [DisplayName("E-Mail Address")] 
    [Required(ErrorMessage = "E-Mail Address is required")] 
    [RegularExpression(@"^[A-Za-z0-9_\-\.][email protected](([A-Za-z0-9\-])+\.)+([A-Za-z\-])+$", ErrorMessage = "Invalid E-mail Address")] 
    public string RegUsername { get; set; } 

    [Required] 
    [Display(Name = "Password")] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 

    [Required] 
    [Display(Name = "Confirm Password")] 
    [Compare("Password", ErrorMessage = "Passwords must match")] 
    [DataType(DataType.Password)] 
    public string RegConfirmPassword { get; set; } 
} 
+0

是的 - 有同样的问题 – sydneyos 2011-08-23 00:06:31

回答

0

嗯,不,我没有遇到过这样的问题。我刚刚测试了下面的代码,并且它按预期完美工作。

型号:

public class UsersRegisterUserViewModel 
{ 
    [DisplayName("E-Mail Address")] 
    [Required(ErrorMessage = "E-Mail Address is required")] 
    [RegularExpression(@"^[A-Za-z0-9_\-\.][email protected](([A-Za-z0-9\-])+\.)+([A-Za-z\-])+$", ErrorMessage = "Invalid E-mail Address")] 
    public string RegUsername { get; set; } 

    [Required] 
    [Display(Name = "Password")] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 

    [Required] 
    [Display(Name = "Confirm Password")] 
    [Compare("Password", ErrorMessage = "Passwords must match")] 
    [DataType(DataType.Password)] 
    public string RegConfirmPassword { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new UsersRegisterUserViewModel(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(UsersRegisterUserViewModel model) 
    { 
     return View(model); 
    } 
} 

查看:

@model UsersRegisterUserViewModel 

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 
    <div> 
     @Html.LabelFor(x => x.RegUsername) 
     @Html.EditorFor(x => x.RegUsername) 
     @Html.ValidationMessageFor(x => x.RegUsername) 
    </div> 

    <div> 
     @Html.LabelFor(x => x.Password) 
     @Html.EditorFor(x => x.Password) 
     @Html.ValidationMessageFor(x => x.Password) 
    </div> 

    <div> 
     @Html.LabelFor(x => x.RegConfirmPassword) 
     @Html.EditorFor(x => x.RegConfirmPassword) 
     @Html.ValidationMessageFor(x => x.RegConfirmPassword) 
    </div> 

    <input type="submit" value="OK" /> 
} 

所以,现在的问题是:如何是你的代码比我有什么不同?

+0

你从哪里获得最新版本的MS的支持jQuery的库? – CrazyCoderz 2011-06-14 13:17:28

+0

@CrazyCoderz,来自VS2010 =>我只是使用默认模板(我已经安装了Tools Update)创建了一个新的ASP.NET MVC 3项目。 – 2011-06-14 13:18:49

+0

惊人什么固定一些报价会做..哎呀,我希望我的3个时间重新写回:) – CrazyCoderz 2011-06-14 13:19:28

1
adapters.add("equalto", ["other"], function (options) { 
    var prefix = getModelPrefix(options.element.name), 
     other = options.params.other, 
     fullOtherName = appendModelPrefix(other, prefix), 
     //element = $(options.form).find(":input[name=" + fullOtherName + "]")[0]; 
     element = $(options.form).find(":input[name='" + fullOtherName + "']")[0]; 
+0

不!即使在工具更新 – CrazyCoderz 2011-06-14 13:27:53

1

MVC3当比较独立于帐户控制器的密码时,比较属性有问题。它似乎是硬编码只能使用帐户控制器。
1.剪切和过去的电子邮件,密码,确认从RegisterModel密码到名为的ViewModels新的文件/ ShortRegister.cs 2.切剃刀代码(电子邮件,密码,确认密码)从寄存器视图和过去它变成局部视图,呼叫它“_shortRegistration”。 3.创建一个名为“ShortRegistration”的新控制器。将部分视图添加到ShortRegistation中。 5.添加相关的jQuery脚本

  1. 创建于ShortRegistration主页上的链接。
  2. 确认错误消息始终激发错误消息。
  3. 从部分视图确认中删除电子邮件,比较功能起作用。
  4. 添加用户名的局部视图,视图模型,比较功能失败,再次确认密码错误信息一直显示错误消息。

一直这个bug被修复?我禁用了Compare属性,并写了jquery和CCS来解决这个问题!我非常乐意通过电子邮件发送代码来证明Compare比较麻烦。

+0

的更新脚本中仍然存在这样的问题,如果您需要代码,请告知我。 – CrazyCoderz 2011-08-17 20:00:23