子对象上的ASP.NET MVC 2模型验证(DataAnnotations)

时间:2010-07-10 05:46:41

标签: asp.net-mvc validation asp.net-mvc-2 data-annotations model-validation

ASP.NET MVC 2模型验证是否包含子对象?

我有一个实例“过滤器”,来自这个类:

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

在我的主要对象中:

public class MainObject
{
    public Filter filter;
}

但是,当我执行TryValidateModel(mainObject)时,即使MainObject.Filter.Text中的“Text”超过5个字符,验证仍然有效。

这是打算,还是我做错了什么?

1 个答案:

答案 0 :(得分: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