asp.net mvc - 替换 C# 属性中的字符串

本文关键字:属性 字符串 替换 net mvc asp | 更新日期: 2023-09-27 17:58:30

创建新的 MVC5 应用程序时,有一个具有此属性的 ViewModel:

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }

我对这部分很有趣:

ErrorMessage = "The {0} must be at least {2} characters long."

我相信{0}[Display(Name = "New password")]那里得到字符串,{2}MinimumLength = 6那里得到字符串。

我不明白的是,为什么它们按这个特定的顺序排列?我的意思是为什么确切地{2}而不是,比如说,{1}MinimumLength = 6中获得价值?同样的问题{0}.如何确定此订单?

下一个声明是否正确?我希望{0}获得显示名称和{1} - length: 25 .

[MinLength(length: 25, ErrorMessage = "Length of {0} must be at least {1} characters long.")]
[Display(Name = "My property")]
public string MyProperty { get; set; }

如果我删除属性[Display(Name = "My property")]会怎样?在这种情况下,{0}是否只是以我的财产名称"MyProperty"

谢谢。

asp.net mvc - 替换 C# 属性中的字符串

"为什么它们按这个特定的顺序排列?">

顺序是:

  1. Display Name
  2. MaximumLength
  3. MinimumLength

问题字符串 frormat 的答案是FormatErrorMessage StringLengthAttribute.cs方法:

public override string FormatErrorMessage(string name) {
    this.EnsureLegalLengths();
    bool useErrorMessageWithMinimum = this.MinimumLength != 0 && !this.CustomErrorMessageSet;
    string errorMessage = useErrorMessageWithMinimum ?
        DataAnnotationsResources.StringLengthAttribute_ValidationErrorIncludingMinimum : this.ErrorMessageString;
    // 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}是否只是将我的财产命名为"我的财产">

是的,它将使用成员名称。

下面是作为name传递给FormatErrorMessage的 DisplayName 属性的代码:

public string DisplayName {
    get {
        if (string.IsNullOrEmpty(this._displayName)) {
            this._displayName = this.GetDisplayName();
            if (string.IsNullOrEmpty(this._displayName)) {
                this._displayName = this.MemberName;
                if (string.IsNullOrEmpty(this._displayName)) {
                    this._displayName = this.ObjectType.Name;
                }
            }
        }
        return this._displayName;
    }   
}