Два замечания:
- Использование общедоступных свойств, а не полей в ваших моделях
- Экземпляр, который вы пытаетесь проверить, должен пройти механизм связывания моделей, чтобы это работало
Я думаю, что первое замечание не нуждается в большом объяснении:
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
.