2011-06-13 88 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