我正在研究一个应该根据保存在数据库中的元数据来验证模型的应用程序。这样做的目的是允许管理员根据客户的偏好更改某些模型的验证方式,而无需更改代码。这些更改适用于整个应用程序,而不适用于访问它的特定用户。如何改变,目前无关紧要。它们可以直接在数据库上修改,也可以使用应用程序修改。这个想法是他们应该可以定制。
假设我的模型“Person”具有“string”类型的属性“Name”。
public class Person
{
public string Name { get; set; }
}
我的应用程序使用此模型,该应用程序在多个服务器上分发和配置。他们每个人都是独立的。某些用户可能希望名称最多包含30个字母,并且在创建新“人员”时需要,其他用户可能希望其具有25个而不是必需的。通常情况下,这可以使用数据注释来解决,但这些注释在编译期间进行评估,并以某种方式“硬编码”。
很快,我想找到一种方法来自定义和存储模型如何验证模型,而无需更改应用程序代码。
此外,使用jquery验证并尽可能少地请求数据库(/ service)会很好。除此之外,我不能使用任何已知的ORM,如EF。
答案 0 :(得分:1)
您可以创建自定义验证属性,通过检查存储在数据库中的元数据进行验证。自定义验证属性很容易创建,只需扩展System.ComponentModel.DataAnnotations.ValidationAttribute
并覆盖IsValid()
方法。
要获得适用于jQuery验证的客户端规则,您需要为扩展System.Web.Mvc.DataAnnotationsModelValidator<YourCustomValidationAttribute>
的自定义验证属性类型创建自定义适配器。然后,此类需要在OnApplicationStart()
的{{1}}方法中注册。
Global.asax
这是一个示例适配器:
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(YourCustomValidationAttribute), typeof(YourCustomAdapter));
如果您想异步调用服务器端验证http://msdn.microsoft.com/en-us/library/system.web.mvc.remoteattribute(v=vs.108).aspx
,这也可能很有用。