{0} 的长度必须至少为 {2} 个字符
The {0} must be at least {2} characters long
我有一个 Visual Studio 2013 MVC Razor 项目,我正在研究 w3schools.com.
上的示例之一
在关于 ASP.NET MVC Security 的章节中,您将在模型 class 中看到默认文件 AccountModels.cs
,每个 密码 字段:
[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; }
我熟悉String.Format,其中参数必须从0开始递增。
然而,上面的第 2 个参数跳转到 2,似乎没有足够的参数传递给字符串。
在学习项目时,我尽我所能自定义功能(如字符串响应)以更好地加强我的学习。
这是怎么回事?
经过更多调查,我在 ASP.NET Forum by CodeHobo 上找到了一个答案:
You can find the full documentation here
[StringLength(100, ErrorMessage = "The password must be at least {0} characters", MinimumLength = 6)]
In this case error message is just a string template that is applied when rendered. Think of a string.Format. So it is equivalent to
string.Format("The {0} must be at least {2} characters long.",DisplayName,MaximumLength,MinimumLength);
The 0 index is the display name of the property, 1 is the maximum length, 2 is the minimum length
For your example, this would show the display name instead of the minimum length. You need to change {0} to {2}
[StringLength(100, ErrorMessage = "The password must be at least {0} characters", MinimumLength = 6)]
是的,我可以简单地删除我的问题,但 SO 是我编程信息的主要来源。
如果我在这里找不到编程答案,我觉得它需要它。
我还不是100%理解答案,所以如果有人有更好的答案,我会很乐意接受。
我们基本上是在调用 class:
的构造函数
StringLengthAttribute
是一个 class,其构造函数有一个 int
参数,名为 maximumLength
它还有一些Properties
:
ErrorMessage
类型 string
- 在我们的例子中是字符串:
"The {0} must be at least {2} characters long."
ErrorMessageResourceName
类型 string
- 在我们的例子中,我们不给它任何值
ErrorMessageResourceType
类型 System.Type
- 在我们的例子中,我们不给它任何值
MinimumLength
类型 int
- 在我们的例子中,我们给它赋值
6
ErrorMessageResourceName
字符串与其他属性(目前)没有任何关系,所以它不是这样的:
String.Format("some variable {0} and some other {1}...", 100, 6)
所以数字 100
和 属性 MinimumLength = 6
根本没有 (还)发送的参数用字符串格式化"The {0} must be at least {2} characters long."
。
classStringLengthAttribute
也有一些方法,其中一种叫做FormatErrorMessage
此方法在内部调用以格式化消息,它在内部使用 String.Format
格式化字符串,这里是将参数传递给要正确格式化的字符串。
- {0} 绑定到 DisplayName
- {1} 绑定到 MaximumLength
- {2} 绑定到 MinimumLength
这是内部调用的方法(如果您想知道它在内部是如何调用的):
/// <summary>
/// Override of <see cref="ValidationAttribute.FormatErrorMessage"/>
/// </summary>
/// <param name="name">The name to include in the formatted string</param>
/// <returns>A localized string to describe the maximum acceptable length</returns>
/// <exception cref="InvalidOperationException"> is thrown if the current attribute is ill-formed.</exception>
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);
}
参考文献:
我有一个 Visual Studio 2013 MVC Razor 项目,我正在研究 w3schools.com.
上的示例之一在关于 ASP.NET MVC Security 的章节中,您将在模型 class 中看到默认文件 AccountModels.cs
,每个 密码 字段:
[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; }
我熟悉String.Format,其中参数必须从0开始递增。
然而,上面的第 2 个参数跳转到 2,似乎没有足够的参数传递给字符串。
在学习项目时,我尽我所能自定义功能(如字符串响应)以更好地加强我的学习。
这是怎么回事?
经过更多调查,我在 ASP.NET Forum by CodeHobo 上找到了一个答案:
You can find the full documentation here
[StringLength(100, ErrorMessage = "The password must be at least {0} characters", MinimumLength = 6)]
In this case error message is just a string template that is applied when rendered. Think of a string.Format. So it is equivalent to
string.Format("The {0} must be at least {2} characters long.",DisplayName,MaximumLength,MinimumLength);
The 0 index is the display name of the property, 1 is the maximum length, 2 is the minimum length
For your example, this would show the display name instead of the minimum length. You need to change {0} to {2}
[StringLength(100, ErrorMessage = "The password must be at least {0} characters", MinimumLength = 6)]
是的,我可以简单地删除我的问题,但 SO 是我编程信息的主要来源。
如果我在这里找不到编程答案,我觉得它需要它。
我还不是100%理解答案,所以如果有人有更好的答案,我会很乐意接受。
我们基本上是在调用 class:
的构造函数StringLengthAttribute
是一个 class,其构造函数有一个 int
参数,名为 maximumLength
它还有一些Properties
:
ErrorMessage
类型string
- 在我们的例子中是字符串:
"The {0} must be at least {2} characters long."
- 在我们的例子中是字符串:
ErrorMessageResourceName
类型string
- 在我们的例子中,我们不给它任何值
ErrorMessageResourceType
类型System.Type
- 在我们的例子中,我们不给它任何值
MinimumLength
类型int
- 在我们的例子中,我们给它赋值
6
- 在我们的例子中,我们给它赋值
ErrorMessageResourceName
字符串与其他属性(目前)没有任何关系,所以它不是这样的:
String.Format("some variable {0} and some other {1}...", 100, 6)
所以数字 100
和 属性 MinimumLength = 6
根本没有 (还)发送的参数用字符串格式化"The {0} must be at least {2} characters long."
。
classStringLengthAttribute
也有一些方法,其中一种叫做FormatErrorMessage
此方法在内部调用以格式化消息,它在内部使用 String.Format
格式化字符串,这里是将参数传递给要正确格式化的字符串。
- {0} 绑定到 DisplayName
- {1} 绑定到 MaximumLength
- {2} 绑定到 MinimumLength
这是内部调用的方法(如果您想知道它在内部是如何调用的):
/// <summary>
/// Override of <see cref="ValidationAttribute.FormatErrorMessage"/>
/// </summary>
/// <param name="name">The name to include in the formatted string</param>
/// <returns>A localized string to describe the maximum acceptable length</returns>
/// <exception cref="InvalidOperationException"> is thrown if the current attribute is ill-formed.</exception>
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);
}
参考文献: