3

ASP.NET MVC 2模型驗證是否包含子對象?Subobject上的ASP.NET MVC 2模型驗證(DataAnnotations)

我有一個實例 「過濾器」,從這個類:

public class Filter 
{ 
    [StringLength(5)] 
    String Text { get; set; } 
} 

在我的主要目標:

public class MainObject 
{ 
    public Filter filter; 
} 

然而,當我做TryValidateModel(mainObject)驗證仍然有效了甚至如果MainObject.Filter.Text中的「文本」長度超過5個字符。

這是打算,還是我做錯了什麼?

回答

1

兩個備註:

  • 使用公共屬性和您的模型並不領域
  • 你正在試圖驗證需要通過這個模型綁定實例工作

我認爲第一句話不需要太多解釋:

public class Filter 
{ 
    [StringLength(5)] 
    public String Text { get; set; } 
} 

public class MainObject 
{ 
    public Filter Filter { get; set; } 
} 

作爲第二,這裏是當它不工作:

public ActionResult Index() 
{ 
    // Here the instantiation of the model didn't go through the model binder 
    MainObject mo = GoFetchMainObjectSomewhere(); 
    bool isValid = TryValidateModel(mo); // This will always be true 
    return View(); 
} 

而這裏的時候它會工作:

public ActionResult Index(MainObject mo) 
{ 
    bool isValid = TryValidateModel(mo); 
    return View(); 
} 

當然,在這種情況下,你的代碼可以簡化爲:

public ActionResult Index(MainObject mo) 
{ 
    bool isValid = ModelState.IsValid; 
    return View(); 
} 

結論:你很少需要TryValidateModel

+0

很好的解釋! – 2010-07-26 22:10:19