首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数据注释的MVC 4手动验证

使用数据注释的MVC 4手动验证
EN

Stack Overflow用户
提问于 2013-04-05 12:26:42
回答 2查看 2.4K关注 0票数 0

我承认我发现了许多类似的问题,但并不完全是这样的:)

我有具有数据注释属性的实体:

代码语言:javascript
复制
  public class BaseEntity
  {
    [Required, DataType(DataType.DateTime)]
    public DateTime CreatedAt { get; set; }
    public string CreatedBy { get; set; }
  }
  public class ExchangeRights : BaseEntity
  {
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required, DataType(DataType.EmailAddress)]
    public string Email { get; set; }
  }

我试着验证一个空对象:

代码语言:javascript
复制
  ExchangeRights r = new ExchangeRights();
  ValidationContext vCtx = new ValidationContext(r);
  List<ValidationResult> res = new List<ValidationResult>();
  Validator.TryValidateObject(r, vCtx, res, true);

结果只有一个错误。电子邮件字段是必需的。但不能表示没有电子邮件格式,也没有指示没有设置CreatedAt字段(好吧,可能是因为非空值类型)

但这是个转折。

首先,我真的希望每个错误都应该是空的,而不是电子邮件格式。

但更大的问题是,如果我将电子邮件设置为"asd“,则该方法不会返回错误。

但是,如果我在创建页面上使用具有强类型视图(使用MVC4和Razor)的实体,那么一切都很好。

该表单表明电子邮件是必需的,或者如果我设置的电子邮件地址格式比它说的无效。还指示需要CreatedAt字段(有或没有必需的属性!!的),如果我将其设置为无效的日期时间格式。

任何帮助/想法/预感都将不胜感激。

谢谢,

佩特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 12:53:47

对于电子邮件的验证,您应该使用EmailAddress验证属性。[EmailAddress]

对于CreatedAt,由于DateTime是一个非空类型,所以当您创建ExchangeRights实例时,属性CreatedAt将使用DateTime.MinValue填充。所以这个属性有一个值。如果您想要不同的行为,请使用DateTime?而不是DateTime。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-04-05 13:03:43

可以使用DataTypeAttribute属性的原因如下:要为数据字段提供其他类型信息,可以将自定义字段模板与数据字段关联起来。DataTypeAttribute不用于验证,它可以用于提供一些额外的元数据信息。要验证电子邮件,您可以使用DataAnnotations扩展EmailAttribute或编写您自己的验证属性。

您可以在http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.datatypeattribute.aspx中找到更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15833965

复制
相关文章

相似问题

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