2015-04-06 58 views
0

我有一個簡單的登錄和註冊頁面的波紋管模型。同一模特登錄和註冊

我可以在同一個模型中使用多個動作結果嗎? 因爲在我的寄存器操作方法的ModelState.isValid = TRUE,並在登錄操作是假的......

public int PacientID { get; set; } 
    [RegularExpression(@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)[email protected](([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,3})$", ErrorMessage = "Please provide valid email")] 
    public string PacientEmail { get; set; } 

    [Required(ErrorMessage = "Please provide username", AllowEmptyStrings = false)] 
    public string PacientUsername { get; set; } 

    [Required(ErrorMessage = "Please provide Password", AllowEmptyStrings = false)] 
    [DataType(System.ComponentModel.DataAnnotations.DataType.Password)] 
    [StringLength(50, MinimumLength = 8, ErrorMessage = "Password must be 8 char long.")] 
    public string PacientPassword { get; set; } 

    [Compare("PacientPassword", ErrorMessage = "Confirm password dose not match.")] 
    [DataType(System.ComponentModel.DataAnnotations.DataType.Password)] 
    public string ConfirmPassword { get; set; } 
+1

是的我不明白爲什麼你不能這樣做 – Pseudonym 2015-04-06 12:41:28

+1

當然你可以使用相同的模型,如果你想 – 2015-04-06 12:42:03

+2

登錄時,用戶不需要輸入ConfirmPassword?如果是,登錄操作的「ModelState.isValid」將爲false? – kcwu 2015-04-06 12:42:39

回答

2

把您需要登錄到LoginModel的屬性,並創建一個RegisterModelLoginModel衍生與需要註冊的額外屬性。

例如:

public class LoginModel 
{ 
    [Required(ErrorMessage = "Please provide username", AllowEmptyStrings = false)] 
    public string PacientUsername { get; set; } 

    [Required(ErrorMessage = "Please provide Password", AllowEmptyStrings = false)] 
    [DataType(System.ComponentModel.DataAnnotations.DataType.Password)] 
    [StringLength(50, MinimumLength = 8, ErrorMessage = "Password must be 8 char long.")] 
    public string PacientPassword { get; set; } 
} 

public class YourOriginalClassName 
    { 
     public int PacientID { get; set; } 

     [Required(ErrorMessage = "Please provide username", AllowEmptyStrings = false)] 
     public string PacientUsername { get; set; } 

     [Required(ErrorMessage = "Please provide Password", AllowEmptyStrings = false)] 
     [DataType(System.ComponentModel.DataAnnotations.DataType.Password)] 
     [StringLength(50, MinimumLength = 8, ErrorMessage = "Password must be 8 char long.")] 
     public string PacientPassword { get; set; } 

     [RegularExpression(@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)[email protected](([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,3})$", ErrorMessage = "Please provide valid email")] 
     public string PacientEmail { get; set; } 

     [Compare("PacientPassword", ErrorMessage = "Confirm password dose not match.")] 
     [DataType(System.ComponentModel.DataAnnotations.DataType.Password)] 
     public string ConfirmPassword { get; set; } 
    } 

更新#1:從您的評論說,在原來的職位類別是一個實體框架模型的一部分繼,那麼我會建議您保留原始課程並將其用於Register操作,並創建一個新的LoginModel(如上所示),並將其用於Login操作。擁有單獨的LoginModel的一個好的理由是這個類不需要寫入數據庫,因此不需要成爲Entity Framework數據模型的一部分。缺點是PacientUsernamePacientPassword屬性必須與驗證屬性一起復制。

+0

嘗試登錄或註冊時出現此異常:在EntityFramework.dll中發生類型「System.InvalidOperationException」的異常,但未在用戶代碼中處理 附加信息:實體類型RegisterModel不是當前上下文的模型的一部分。 – 2015-04-06 13:38:10

+0

您的原始模型類是否代表數據庫表? – MotoSV 2015-04-06 13:38:24

+0

是的,這是正確的 – 2015-04-06 13:39:19