39

在 MVC4 模板中,使用的数据注释属性之一是 stringlength。

例如:

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]

哪些参数 {0}、{1}、{2}(更多?)是合法的?

编辑:更具体地说,我可以从示例和反复试验中看到可能性是什么,但我希望看到一些硬文档。

我在StringLengthAttribute 文档中找不到任何关于此的内容。

4

3 回答 3

52

{0}index 是属性的显示名称,{1}MaximumLength{2}MinimumLength。因此,您的错误消息将被格式化为"The Foo must be at least 6 characters long."

于 2012-11-16T22:26:00.207 回答
12

我也没有看到任何文档,但是FormatErrorMessage方法StringLengthAttribute看起来像这样:

public override string FormatErrorMessage(string name)
{
    EnsureLegalLengths();
    string format = ((this.MinimumLength != 0) && !base.CustomErrorMessageSet) ? DataAnnotationsResources.StringLengthAttribute_ValidationErrorIncludingMinimum : base.ErrorMessageString;
    return String.Format(CultureInfo.CurrentCulture, format, new object[] { name, MaximumLength, MinimumLength });
}
于 2013-12-17T11:07:12.793 回答
6

在我开始获得一些可靠的线索之前,比预期更长的 Google 搜索将我带到了这个老话题,所以我把它放在这里,希望它可以帮助其他处于同样情况的人:

检查 MS 在 GitHub 上发布的StringLengthAttribute代码确认了 FormatErrorMessage 方法中的逻辑:

// it's ok to pass in the minLength even for the error message without a {2} param since String.Format will just
// ignore extra arguments
return String.Format(CultureInfo.CurrentCulture, errorMessage, name, this.MaximumLength, this.MinimumLength);

因此,“0”、“1”和“2”相应地对应于“名称”(属性)、“最大长度”和“最小长度”。

我敢打赌,同样的方法可以应用于所有其他验证属性,以相应地检查它们的格式参数;否则,我无法找到有关此信息的任何其他文档。

于 2018-08-15T08:52:42.187 回答