由於我首先使用數據庫,我通過ViewModel驗證了我的輸入。但是這對於驗證來說足夠好,還是有一些不成文的規則來添加它在控制器?MVC - 足以在ViewModel中驗證嗎?
此外,什麼是最常見的屬性驗證,可以說密碼?
[Required]
[StringLength(50)]
[MinLength(3)]
public string Password { get; set; }
這是一個很好的驗證?
由於我首先使用數據庫,我通過ViewModel驗證了我的輸入。但是這對於驗證來說足夠好,還是有一些不成文的規則來添加它在控制器?MVC - 足以在ViewModel中驗證嗎?
此外,什麼是最常見的屬性驗證,可以說密碼?
[Required]
[StringLength(50)]
[MinLength(3)]
public string Password { get; set; }
這是一個很好的驗證?
屬性驗證對於它可以完成的工作非常有用。除了您提到的驗證屬性之外,您還擁有EmailAddress屬性,可將給定屬性驗證爲電子郵件地址。
[EmailAddress(ErrorMessage = "Invalid Email Address")]
然後,你必須做更復雜的自定義驗證的正則表達式驗證屬性:
[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$",
ErrorMessage = "Characters are not allowed.")]
對於條件驗證之類的事,你可以在邏輯添加到您的控制器和ModelState中添加錯誤,需要。
例子:
if (MyProperty == "something" && MyOtherProperty != "something")
{
ModelState.AddModelError("", "MyOtherProperty needs to be something")
}
如果你不想在你的控制器邏輯,樣板驗證代碼,您可以編寫自己的自定義驗證屬性。通過這樣做,你幾乎可以驗證任何你能想到的。
在互聯網上有關於該主題的大量資源。
How to create a custom validation attribute?
How to create Custom Data Annotation Validators
僅舉幾例。
不要忘記通過調用ModelState.IsValid來檢查ModelState的有效性。除此之外,我可以想象你需要做一些額外的數據庫驗證檢查。
通過額外的數據庫驗證檢查,你是什麼意思,例如? – Nyprez
假設有人註冊了一個帳戶。由他輸入的值可能是有效的,但如果輸入的用戶名尚未被採用,您仍然希望檢入數據庫。 – user1796440
啊,我明白了!我想要做那個槽控制器嗎?可以說一個'用戶名'。如果數據庫中已經存在「用戶名」(仍然是槽控制器),我將返回「已存在」 - 錯誤。如果不是,則會添加「用戶名」。這是一個正確的方法嗎? – Nyprez
我很樂意去糾正,但我相信*這些屬性會動態地設置HTML,以便輸入將具有「required」屬性集。但我不記得它曾經爲你做過服務器端檢查。您可能還需要清理控制器中的數據,這絕不是一個壞習慣。 –
@DrewKennedy啊我明白了。你知道任何關於在控制器中添加驗證的好指南嗎? – Nyprez
並不是一個指南,但是您始終可以使用'ModelState'運行驗證檢查,並使用'AddModelError'來定義每個問題,或者使用該屬性來定義錯誤消息。 [這是一個很好的例子](http://stackoverflow.com/a/21911236/4204026)。 –