У меня есть класс, который требует указания другого класса, но я не хочу, чтобы валидатор MVC ModelState проверял, допустима ли вторичная модель. Возможно ли это?
Вот краткий обзор:
Мои сущности выглядят примерно так:
public class WidgetType
{
public long Id { get; private set; }
[Required]
public string Name { get; set; }
...
}
public class Widget
{
public long Id { get; private set; }
[Required]
public string Name { get; set; }
[Required]
public WidgetType WidgetType { get; set; }
...
}
Я инкапсулировал их в класс WidgetViewModel
, который я передаю в / из вида следующим образом:
public class WidgetViewModel
{
public Widget Widget { get; set; }
public ICollection<WidgetType> WidgetTypes
{
get
{
return _repository.GetWidgets();
}
}
...
}
Мой взгляд выглядит примерно так:
...
@Html.DropDownListFor( m => m.Widget.WidgetType.Id, new SelectList( new EquipmentViewModel().EquipmentTypes, "Id", "Name" ) )
...
Все это работает, кроме проверки. ModelState.IsValid
всегда ложно, потому что требуется "Widget.WidgetType.Name"
. Мне нужно, чтобы пользователь выбрал WidgetType
, но я не хочу, чтобы ModelState проверялся глубже, чем "Widget.WidgetType.Id" (что должно быть всем, что Widget
необходимо для его внешнего ключа?).
Есть ли лучший способ сделать это? Я чувствую, что должен быть какой-то способ проверки без рекурсивного осмотра свойств, но я не могу его найти. Чего мне не хватает ...?