所以, 我有了很多領域的「用戶」模式,但以下是IMPT的:mvc模型和viewmodel?
public int Id {get;set;}
public string Username { get; set; }
public string Pwd { get; set; }
和我有驗證,我在使用口令視圖模型不同的控制器:
public class ConfirmPassword : IValidatableObject
{
[Required]
public string Password { get; set; }
[Required(ErrorMessage="Confirm Password field is required.")]
public string ConfirmPwd { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
string regex1 = @"^.{8,10}$"; // 8 - 10 characters
Match requirement1 = Regex.Match(Password, regex1);
if (Password != ConfirmPwd)
yield return new ValidationResult("Password and Confirm Password is not identical.");
if (!requirement1.Success)
yield return new ValidationResult("Password must be between 8 and 10 characters.");
}
}
有沒有一種方法可以將視圖模型連接到我的模型實體?或者只是複製粘貼代碼我的唯一選擇?我不能複製粘貼,因爲代碼需要有一個IValidateObject,這將會弄亂整個用戶實體,因爲有大量的後臺審計發生。我只需要在編輯/創建配置文件時驗證密碼。
編輯: 很抱歉,如果每個人都感到困惑。基本上,我有多個驗證,我需要確認無法通過dataannotations處理的密碼,請使用confirmpassword視圖模型。我希望將這種驗證應用到用戶模型上,但不在其中添加「ConfirmPassword」字段。因爲我不需要數據庫上的另一個字段。我的問題是,如何強制驗證密碼中的驗證觸發視圖POST和密碼字段不符合要求?
namespace
{
public class User
{
public int Id {get;set;}
public string Username { get; set; }
public string Pwd { get; set; }
}
}
namespace
{
public class ConfirmPassword : IValidatableObject
{
[Required]
public string Password { get; set; }
[Required(ErrorMessage="Confirm Password field is required.")]
public string ConfirmPwd { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
string regex1 = @"^.{8,10}$"; // 8 - 10 characters
string regex2 = @"(?:.*?[A-Z]){1}"; // 1 uppercase
string regex3 = ""; // 1 lowercase
string regex4 = ""; // 1 numeric
Match requirement1 = Regex.Match(Password, regex1);
Match requirement2 = Regex.Match(Password, regex2);
Match requirement3 = Regex.Match(Password, regex3);
Match requirement4 = Regex.Match(Password, regex4);
if (Password != ConfirmPwd)
yield return new ValidationResult("Password and Confirm Password is not identical.");
if (!requirement1.Success)
yield return new ValidationResult("Password must be between 8 and 10 characters.");
if (!requirement2.Success)
yield return new ValidationResult("Password must contain at least 1 uppercase letter.");
if (!requirement3.Success)
yield return new ValidationResult("Password must contain at least 1 lowercase letter.");
if (!requirement4.Success)
yield return new ValidationResult("Password must contain at least 1 numeric character.");
}
}
}
爲什麼你不使用'StringLengthAttribute' –
好,這不是我唯一的驗證。我只是把它縮短了。還有4個使用正則表達式。 – gdubs
如果您對情況有任何控制權,則應避免使用密碼長度的設置上限。告訴外部世界密碼是8-10個字符還告訴黑客在進行暴力攻擊時需要使用多少個字符。 –