C# 对于不需要的实体属性(如电子邮件和Url),是否可以进行属性验证?

C# 对于不需要的实体属性(如电子邮件和Url),是否可以进行属性验证?,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我正在尝试向实体属性添加验证属性,如下所示: [StringLength(100, ErrorMessage = "Must be between 1 to 100 characters")] [EmailAddress] public string Email { get; set; } 我遇到的是,这些属性不是必需的,但它仍然应用属性验证,并且返回的电子邮件地址无效,特别是当此非必需字段为空时 当属性不是必需且为空时,是否有任何方法可以使用这些[Email]和[Url] 我假设有,但一直找

我正在尝试向实体属性添加验证属性,如下所示:

[StringLength(100, ErrorMessage = "Must be between 1 to 100 characters")]
[EmailAddress]
public string Email { get; set; }
我遇到的是,这些属性不是必需的,但它仍然应用属性验证,并且返回的电子邮件地址无效,特别是当此非必需字段为空时

当属性不是必需且为空时,是否有任何方法可以使用这些[Email]和[Url]


我假设有,但一直找不到这方面的任何信息。

您所拥有的应该有用。您是否在模型的属性上具有
[必需]
属性(假设这是一个视图模型)?

如果电子邮件字段为空,您可以为电子邮件设置值,并将值返回模型:`

@Html.TextBoxFor(m=>m.Email,new{Value=""})

改用
DataTypeAttribute
如何?(
[DataType(DataType.EmailAddress)]
)认为这会起作用,但它不起作用。我也这么做了,它没有验证空的电子邮件地址。你能添加视图代码吗?此外,验证在客户端或服务器端触发?这是一个非必填字段,但我仍然希望在出现此字段时使用[EmailAddress]。我理解。您提供的代码完全符合您的要求。我用同样的注释设置了一个项目,它按照预期工作。真不敢相信我忽略了这个问题,这个特定场景是针对字段本身为空且不需要的情况。正在应用该属性。@UserSmith这是我测试的场景。在我的测试中,只有在字段中输入文本时,EmailAddress属性才被验证。如果我将其留空,则不会触发验证。在您的场景中,验证发生在客户端还是服务器端?从技术上讲是服务器端,因为它必须获取实体属性才能执行验证。我没有使用jquery进行验证。在我的团队中,可能还有3个人有同样的问题,我们刚刚做了我们自己的正则表达式来绕过这个问题,但我似乎无法克服这样做不起作用的想法。