2014-03-19 31 views
0

我正在使用Visual Studio 2012和實體框架6.我下載了MVC5的更新。我創建了一個模型類CreateUser如下驗證在MVC5不起作用

public class CreateNewUser 
    { 
     [Required] 
     [Display(Name = "Name")] 
     public String Name{set;get;} 
     [Required] 
     [Display(Name = "Mobile")] 
     [RegularExpression(@"^([0|\+[0-9]{1,5}[\-\s])?([7-9][0-9]{9})$", ErrorMessage = "Entered phone format is not valid.")] 
     public String Mobile { get; set; } 
     [Required] 
     [EmailAddress] 
     [Display(Name = "Email")] 
     public String Email { get; set; } 
     [Required] 
     [Display(Name = "Password")] 
     [DataType(DataType.Password)] 
     public String Password { get; set; } 
    } 

,並使用這個模型類視圖。當我運行表單它提交出來驗證。我在服務器上使用了ModelState.IsValid並跨越了它。即使表單中有空字段,它也總是顯示爲真。 客戶端和服務器端驗證工作在mvc3mvc4。但我搬到了mvc5它不工作。 ClientValidationEnabledUnobtrusiveJavaScriptEnabledwebconfig中設置爲true。有什麼我需要在MVC5設置爲啓用驗證

+1

讓我看看視圖嗎? –

回答

1

具有強類型View提交和觸發器客戶端驗證通常是開箱即用的東西。例如,我剛剛在VS 2013中創建了一個新項目(不是VS 2012),並選擇了帶有Individual User Accounts的MVC模板(以便加載,捆綁所有相應的腳本等)。

然後,我創建了一個名爲CreateNewUser的ViewModel並複製/粘貼了您的所有屬性。

然後,我在我的控制器中創建兩個ActionResult。一個用於加載視圖,另一個用於處理表單的提交。

public ActionResult CreateUser() 
{ 
    var model = new CreateNewUser(); 
    return View(model); 
} 

[HttpPost] 
public ActionResult CreateUser(CreateNewUser model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    //Model is valid so continue... 
    return null; 
} 

然後,我創建了強類型爲此CreateNewUser類的視圖。

當我點擊提交按鈕時,窗體的客戶端驗證完美地工作!

也許,無論VS2012還是VS2013,您都應該創建一個全新的項目,並創建一個與我一樣的簡單示例。從那裏開始,讓它工作,然後嘗試比較與當前情況不同的事物。

這就是我將如何通過比較解決方案和解決方案來解決我的問題的方法,這種解決方案不能用來指出真正的罪魁禍首。

希望這會有所幫助!

0

如果您通過單元測試評估IsValid標誌,它似乎總是如此,並且驗證屬性被完全忽略(當通過IIS Express執行相同的代碼時,它仍能正常工作)。

我們發現一種解決這個問題的方法是在檢查IsValid之前調用controller.TryValidateModel。如果你不想污染你的生產代碼,你可以使用單元測試的反射來做到這一點。