Проверка модели ASP.NET MVC 2 (аннотации данных) на подобъекте - PullRequest
3 голосов
/ 10 июля 2010

Включает ли проверка модели ASP.NET MVC 2 подобъекты?

У меня есть экземпляр "Filter" из этого класса:

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

в моем основном объекте:

public class MainObject
{
    public Filter filter;
}

Однако, когда я делаю TryValidateModel (mainObject), проверка все равно срабатывает, даже если «Text» в MainObject.Filter.Text длиннее 5 символов.

Это предназначено, или яделать что-то не так?

1 Ответ

1 голос
/ 10 июля 2010

Два замечания:

  • Использование общедоступных свойств, а не полей в ваших моделях
  • Экземпляр, который вы пытаетесь проверить, должен пройти механизм связывания моделей, чтобы это работало

Я думаю, что первое замечание не нуждается в большом объяснении:

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.

...