2014-07-16 40 views
2

我有一个包含HttpPostedFileBase类型属性的模型,并且我创建了一个自定义验证属性,该属性实现RequiredAttribute以进行一些验证。它在您创建模型时非常有效。但是,我不想在编辑模型时进行任何验证(编辑模型时可选的HttpPostedFileBase属性)。我如何制作它?如何使一个RequiredAttribute创建不用于编辑模型

回答

3

您的属性是添加到类的属性的简单元数据。这个属性没有关于你对类所做的事情的信息,即如果你正在使用这个类来编辑或创建一个新的实体。

所以,答案是你不能直接在属性中做到这一点。因此,如果您正在编辑值,唯一的解决方案是“绕过”您使用它的属性。有几种选择:

  1. 使用两种不同的模型,一种用于编辑,另一种用于创建。并仅在模型中修饰属性以创建
  2. 使用某些代码删除验证或错误:例如,您可以在编辑操作的发布操作中从ModelState中删除属性错误。

显然最简单的是1.您可以使用所有字段的基类,但是具有不同处理的基类,然后继承它用于创建或编辑。在使用MVC时,用不同模型表示相同的数据并不奇怪:查看模型,显示编辑器的模型,接收版本结果的模型...因此,使用几种不同的模型不是问题在所有。您可以使用AutoMapperValueInjecter来简化实体和模型之间的数据移动。

+0

我用NotMapped标记了属性,以便它不会保存在数据库中,但仍然当属性为空时它会抛出异常。仅仅是因为它用我的验证属性(必需)标记? – user217648

+0

什么时候抛出异常?有没有内部异常或附加信息?数据注释由几个不同的层使用,例如通过EF和MVC绑定。 – JotaBe

相关问题