我在ASP.Net MVC中使用DataAnnotations和MetadataType通过我们的www网站上的表单验证我的一个自定义对象的创建。它工作得非常好。
但现在我们还需要能够通过内部管理站点中的表单创建相同的对象。
但是,验证规则略有不同,因为我们通过内部管理系统完成表单时,www站点上的某些字段是强制性的,这些字段不是强制性的。
此外,我希望能够为相同的字段提供不同的DisplayNames和不同的验证消息,具体取决于从哪个站点/表单收集数据等。
我如何基本上有两个不同的MetadataType,并指定在管理站点内验证时我想使用哪一个,而不是www站点。两组不同的验证规则以及指定我正在验证哪一个的能力..
我使用我的MetadataType使用Buddy(部分)类,因为我的对象是由LINQ to SQL自动生成的。
答案 0 :(得分:3)
这可能会有所帮助:
http://andrewtwest.com/2011/01/10/conditional-validation-with-data-annotations-in-asp-net-mvc/
答案 1 :(得分:1)
我之前一直处于同样的境地。我当时在那里搜索,但发现没有解决方案可以在同一个类上给你两套验证规则。
我解决它的方法是使用视图模型。您有“核心”模型类,并且您希望不同的UI(在本例中为Web和管理UI)具有不同的验证规则。在这种情况下,您不需要模型类的伙伴类,因为您不希望在模型类本身上应用验证规则,而是需要从模型类继承以创建两个视图模型类,一个用于Web另一个用于管理界面,并根据您的需要使用DataAnnotations对这些类应用验证规则。您还可以使用任何额外的UI特定属性“增强”视图模型类。
我知道这个解决方案并不完美,因为你会在两个不同的地方有你的验证规则而且它通常是不可取的但是它有效并且实际上并不是那么糟糕,特别是如果应用程序不是很大的话。唯一的其他解决方案是手动检查用户正在使用的位置(Web或管理员),然后根据该位置添加模型状态错误。但我不建议这样做。
我很想知道是否有人有更好的解决方案。