【问题标题】:MaxLength attribute and unobtrusive validationMaxLength 属性和不显眼的验证
【发布时间】:2014-04-04 16:03:29
【问题描述】:

如果我将MaxLengthAttribute 添加到这样的属性:

[MaxLength]
[DataType(DataType.MultilineText)]
public string Notes { get; set; }

标记呈现如下:

<textarea class="form-control" data-bind="value: Notes" data-val="true" data-val-maxlength="The field Notes must be a string or array type with a maximum length of '-1'." data-val-maxlength-max="-1" id="Notes" name="Notes"></textarea>

验证结果如下所示:

这显然不是预期的结果。文本区域应该允许比“-1”更多的字符。

我可以想出多种方法来解决这个问题(例如,通过 jQuery 删除属性、使用 javascript 手动更新规则等)。

解决此问题的最优雅的方法是什么?这是 MVC/Validator 的错误吗

【问题讨论】:

标签: jquery-validate unobtrusive-validation asp.net-mvc-5.1


【解决方案1】:

您没有指定所需的最大字符串长度,您期望什么? MaxLength 属性的 This overload 采用整数作为参数,指定字符串的实际最大允许长度。当您使用parameter-less constructor 时,它将使用数据库允许的最大长度,但不确定为什么 jQuery Validation 选择将其实现为 -1。

【讨论】:

  • 谢谢,我知道,但我需要它在不指定实际最大长度的情况下工作。你看,如果我没有指定最大长度值,EF 会确保该列被创建为 NTEXT(我相信),所以我需要它。
  • 您是否也使用您的 EF 实体作为视图模型?
  • 不,但我从 EF 实体构建模型。这样,它们“继承”了 EF 实体的属性。如果缺少最大长度值,我可以更改脚手架逻辑以添加最大长度值,但如果不需要,我宁愿不这样做。
  • 我认为您不应该这样做,以避免此类问题。
  • 嗯,我不确定我是否同意。除非绝对没有其他更好的方法来处理这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多