【发布时间】:2012-08-08 18:59:56
【问题描述】:
我正在尝试创建填充以下情况的 MVC 模型验证属性: 我创建了几个模型(生日和电话号码是很好的例子),它们通过视图上的多个输入字段(月、日、年;区号、交换、后缀)提交。
public class PhoneNumber
{
[RegularExpression("^([2-9][0-8][0-9])$", ErrorMessage = "Invalid Area Code")]
public virtual string AreaCode { get; set; }
[RegularExpression("^([2-9][0-9][0-9])$", ErrorMessage = "Invalid Phone Exchange")]
public virtual string Exchange { get; set; }
[RegularExpression("^([0-9][0-9][0-9][0-9])$", ErrorMessage = "Invalid Phone Suffix")]
public virtual string Suffix { get; set; }
}
我经常将这些模型嵌套在其他模型中(例如,Person 有一个 PhoneNumber 和一个 Birthday)。在我看来,有时需要电话号码,有时则不需要。 我可以通过将类实现为 IValidatableObject 来在服务器端处理这些情况,但如果我想进行客户端验证,甚至只是通过属性进行服务器端验证,我就会遇到麻烦。
我想我将不得不构建自己的自定义验证属性,但我什至不确定从哪里开始访问多个级别的对象和属性信息。有没有人遇到过这样的事情?有什么好主意可以为我指明正确的方向吗?
提前致谢!
--------更新-----
通过使用 IClientValidatable 和 GetClientValidationRules,我可以访问 ModelMetadata 可以获取容器的类型。问题是容器是生日或电话号码,而不是顶级模型的类型,这是最重要的。 ModelMetadata 尚未填充 Model 属性,因为它可能还不存在。我真正想做的是获得顶级模型的类型。有人有什么见解吗?
【问题讨论】:
标签: asp.net-mvc