2010-03-18 67 views
1

現在發瘋了。我有一個MVC解決方案,我已經從MVC 1升級到2.這一切都正常工作....除了驗證!MVC 2數據註釋問題

下面是一些代碼:

在控制器:

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Linq; 
using System.Security.Principal; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Security; 
using System.Web.UI; 
using MF.Services.Authentication; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 

namespace MF.Controllers 
{ 
    //basic viewmodel 
    public class LogOnViewData 
    { 
    [Required] 
    public string UserName { get; set; } 

    [Required] 
    public string Password { get; set; } 
    } 

    [HandleError] 
public class AccountController : Controller 
{ 
     [HttpPost] 
     public ActionResult LogOn(LogOnViewData lvd, string returnUrl) 
     { 

     if (ModelState.IsValid) 
     { 
     //do stuff - IsValid is always true 
     } 
     } 
    } 
} 

的ModelState中始終有效。但是,該模型正在正確填充。因此,如果我將用戶名和密碼留空,並且發佈表單,模型狀態仍然有效。哎呀!

額外信息:使用物聯網的結構圖。以前,升級到MVC 2之前使用MS數據註釋庫,所以這在我的global.asax.cs中: ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();

現在已經刪除了。

我確定我正在做一些非常基本和錯誤的事情。如果有人能指出這將是奇妙的。 乾杯

回答

0

通過MVC2開發的一半,他們從輸入驗證轉爲模型驗證,這應該在所有情況下都完全驗證您的對象。確保你使用的是最新版本(RTM)。

但是,[Required]只是表示該屬性不能是null。不幸的是,String.Empty(這是字符串的默認值)不是null,因此模型驗證將傳遞給空字符串。

請參閱this post by Brad Wilson for important details

作爲解決方案,您可以使用[RegularExpression("....")]對最小字符串長度和允許的字符施加限制。

+0

哦,我明白了 - 謝謝。這確實是非常有意義的:) 但是,我已經開始了一個全新的MVC項目,它對登錄控制動作進行了驗證,這與我的幾乎完全一樣。當然,它工作正常。我只是有點難以理解,不同之處在於! 再次感謝 – Louzzzzzz 2010-03-19 08:42:08

+0

修正了它!刪除然後重新添加我的web項目中的所有引用,並按預期工作。 – Louzzzzzz 2010-03-19 09:10:27