【问题标题】:Allow a property to be null or a specified length允许属性为空或指定长度
【发布时间】:2014-08-15 18:14:38
【问题描述】:

我有以下定义。

[StringLength(4, MinimumLength = 4, ErrorMessage = "Mobile Last 4 must be 4 digits.")]
public string MobileLast4 { get; set; }

我希望能够使用null ,如果该字段确实有值,那么它的长度必须是 4 个字符。

我遇到的问题是,如果属性为 null,则验证失败。我应该使用其他属性还是需要自己滚动?

我想我可以使用可以为空的 int 和 range 属性来解决这个问题,但我还有其他不接受数字的属性。

【问题讨论】:

  • 初始化为 4 个空字符 "\0\0\0\0"
  • 模型绑定器看到这个并转义它,所以我最终实际上得到了那个值。除了有点 hackish 你不觉得吗?
  • 是的,非常骇人听闻,当您需要 4 个没有任何意义的字符时,这只是想到的第一件事。如果 [stringlength] 不支持它,您将不得不找到其他东西或无论如何破解它
  • StringLength 不强制验证:如果值留空,它不应该使验证失败。

标签: c# data-annotations asp.net-web-api2


【解决方案1】:

使用 [StringLength] 属性不会使该字段成为必填项。如果您的验证失败,则不是由您显示的代码引起的。

【讨论】:

  • 支持andreas的回答-根据定义:“当需要指定属性允许的字符数时,您将StringLengthAttribute属性应用于属性。如果属性的值为null ,则该值不会通过 StringLengthAttribute 属性的验证。要验证该值不为 null,请使用 RequiredAttribute 属性。"
  • 叹息,我觉得自己很笨。在我问这个问题之前做了很多调试,得出的结论是它正在验证 null,但在进一步调试后发现字符串是 ""
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 2011-04-22
  • 2015-08-23
相关资源
最近更新 更多