如何使用DataAnnotations仅验证Viewmodel中的部分字段?

时间:2010-12-03 09:03:37

标签: asp.net-mvc-2 viewmodel validation

我有一个看起来像这样的Viewmodel:

public class Viewmodel
{

  public int Type {get;set} // 0 if typeA, 1 if typeB

  [Required]
  public string AProperty1 {get;set}

  [Required]
  public string AProperty1 {get;set}

  ...

  [Required]
  public string BProperty1 {get;set}

  [Required]
  public string BProperty1 {get;set}
}

有两种形式可以获得此视图模型,而在FormA用户输入中,AProperty1,AProperty2等和BProperty-s返回为null。 与FormB相同。 表单类型(FormA或FormB)分配给ViewModel.type字段。

所以问题是在我的控制器中我检查了ModelState.IsValid属性,它在两个方面都是假的,因为一半的字段总是为空。

一种可能的解决方案是以某种方式覆盖ModelView中的ModelState.IsValid属性,以便我可以将类型传递给它。但据我所知,没有办法。

还有其他解决方案吗? (它最好能够与客户端验证一起使用)

1 个答案:

答案 0 :(得分:2)

如果确实只需要一个ViewModel用于两个不同的视图,“部分验证”可能是您的解决方案。看看这个博客:

http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/