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"
?
谢谢。
"为什么它们按这个特定的顺序排列?">
顺序是:
-
Display Name
-
MaximumLength
-
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;
}
}