2010-10-27 76 views
1

我在MVC.I've一個結點模型:ASP.NET MVC ModelState IsValid - 如何從驗證中排除特定屬性?

public class Usuarios 
    { 

    [Required(ErrorMessage = "**TxtOPID is required")] 
     public string TxtOpID 
     { 
      get { return this.txt_opId; } 
      set { this.txt_opId = value; } 
     } 

    [Required(ErrorMessage="**Password is required")] 
     public string TxtPassword 
     { 
      get { return this.txt_password; } 
      set { this.txt_password = value; } 
     } 

     [Required(ErrorMessage="**Email is required")] 
     [RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$",ErrorMessage="**Invalid email")] 
     public string TxtEmail 
     { 
      get { return this.txt_email; } 
      set { this.txt_email = value; } 
     } 
} 

這是DataAnnotations,當我嘗試檢查,如果所有屬性都與ModelState.IsValid propertie有效工作正常。

問題是當我不想檢查所有properties.i.e: 如果我只想檢查TxtOPID和TxtSenha屬性,就像在登錄表單中一樣,只需要OPID和密碼。

如何在控制器中的特定操作中排除電子郵件屬性驗證?

我想:

public ActionResult SignIn([Bind(Exclude="TxtEmail")]Usuarios usuario) 
    { 
    [...] 
    } 

但它不工作,它是無效的原因,TxtEmail不需要特定形式。

任何意識?

回答

3

不要把所有的驗證放在一個類中。爲Login創建一個類,另一個爲Contact等。

基本上每個模型都有DataAnnotations來驗證該模型..即使您有30個不同的模型。你總是可以創建一個基類,並在其中放置通用屬性並簡單地繼承它。

在我的情況我有一個登錄表單和類(使用DataAnnotations)驗證「用戶名」和「密碼」。我也有一個需要事件名稱,日期,時間等的「事件」表單。所以我有另一個類來驗證事件。

+0

但是,那些類會重複它們的屬性? – ozsenegal 2010-10-27 19:54:12

+0

是的,他們可以......例如。你可以在3個不同的地方使用「電子郵件」。一個用於聯繫表單,一個用於登錄表單,一個用於gravatar。您將製作3個模型(登錄,電子郵件,gravatar)並驗證每個模型的電子郵件屬性。 – 2010-10-27 19:55:39

+0

他們可以,但這不是在OOP – ozsenegal 2010-10-27 19:57:01