對於我網站的登錄頁面,我想列出我網站的最新消息,並顯示幾個字段以讓用戶登錄。所以我想我應該創建一個登錄視圖模型 - 我稱之爲LoginVM
。ASP.NET MVC:我如何驗證包裝在ViewModel中的模型?
LoginVM
包含登錄字段的Login
模型和新聞列表的List<NewsItem>
。
這是Login
型號:
public class Login
{
[Required(ErrorMessage="Enter a username.")]
[DisplayName("Username")]
public string Username { get; set; }
[Required(ErrorMessage="Enter a password.")]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }
}
這是LoginVM
視圖模型:
public class LoginVM
{
public Login login { get; set; }
public List<NewsItem> newsItems { get; set; }
}
這是我卡住。在我的登錄控制器中,我通過了一個LoginVM
。
[HttpPost]
public ActionResult Login(LoginVM model, FormCollection form)
{
if (ModelState.IsValid)
{
// What?
在我檢查ModelState
是否有效,這將正常工作,如果視圖模型竟是Login
模型,但現在它的LoginVM
它沒有驗證所有屬性的代碼。
如何讓LoginVM
通過其成員「遍歷」來驗證它們?以這種方式使用ModelState
做一些根本性的錯誤?如果newsItems只是爲了顯示,並不需要驗證或者
public class LoginVM
{
[Required]
public Login login { get; set; }
public List<NewsItem> newsItems { get; set; }
}
這似乎是工作,我會盡快接受的答案,所以讓我。但是這裏真的發生了什麼?這是一個黑客,使ASP.NET MVC驗證'登錄'實例? – 2010-06-15 14:38:15
@Deniz Dogan - 基本上,如果ModelBinder無法創建新的Login(),驗證將失敗。沒有黑客。 – jfar 2010-06-15 14:44:28
不,這不是黑客,實際上這是模型驗證如何在MVC的V2中起作用。看看這篇博文http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BradWilson+ %28Brad +威爾遜%29 – vintem 2010-06-15 16:06:00