【发布时间】:2011-10-05 18:31:07
【问题描述】:
我有一个需要指定另一个类的类,但我不希望 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 始终为 false,因为 "Widget.WidgetType.Name" 是必需的。我需要用户选择一个WidgetType,但我不希望对 ModelState 进行比“Widget.WidgetType.Id”更深的验证(这应该是 Widget 对其外键所需的全部内容?)。
有没有更好的方法来做到这一点?我觉得应该有某种方法来验证,而无需递归检查更深入的属性,但我找不到它。我错过了什么……?
【问题讨论】:
-
此链接可能会让您了解如何实现部分验证。 blog.stevensanderson.com/2010/02/19/…
-
@bmosh 这看起来很有希望。将在办公室检查一下。
-
@bmosh 创建
ActionFilterAttribute正是我想要的。如果您发布答案,我会接受。谢谢。
标签: c# validation asp.net-mvc-3