首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.Net MVC中嵌套模型的客户端验证

ASP.Net MVC中嵌套模型的客户端验证
EN

Stack Overflow用户
提问于 2012-08-09 02:59:57
回答 1查看 577关注 0票数 0

我正在尝试创建一个MVC模型验证属性来填充以下情况:我已经创建了几个模型(Birthday和PhoneNumber是很好的例子),这些模型通过视图上的多个输入字段(月、日、年;区域代码、交换、后缀)提交。

代码语言:javascript
运行
复制
  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和一个生日)。在我看来,有时需要PhoneNumber,有时不需要。我可以通过将类实现为IValidatableObject在服务器端处理这些情况,但如果我想进行客户端验证,或者只是通过属性进行服务器端验证,我就会遇到麻烦。

我想我将不得不构建自己的自定义验证属性,但我甚至不确定从哪里开始在多个层次上访问对象和属性信息。有没有人遇到过这样的事情?有什么好主意给我指明正确的方向吗?

提前感谢!

-更新

通过使用IClientValidatable和GetClientValidationRules,我可以访问ModelMetadata来获取容器的类型。问题是容器是生日或电话号码,而不是顶级模型的类型,这在这里是最重要的。ModelMetadata尚未填充模型属性,因为该属性可能尚不存在。我真正想做的是获取顶级模型的类型。有谁有什么见解吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-09 03:10:45

根据您编写视图的方式,我认为您可能想要查看一个名为BeginCollectionItem http://nuget.org/packages/BeginCollectionItem的扩展

如果你这样做,验证会变得有点混乱

代码语言:javascript
运行
复制
@Html.TextBoxFor( m => number.AreaCode )

而不是

代码语言:javascript
运行
复制
@Html.TextBoxFor( m => m.AreaCode )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11871317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档