我首先在 ASP MVC 项目中使用 Entity Framework 代码,我想更改为验证数字类型而出现的错误消息。
我有这样的属性
public decimal Amount1 { get; set; }
如果我在字段中输入非数字,我会收到消息:字段 Amount1 必须是数字。
如何更改该消息?
对于其他验证,例如 Required
,我可以使用 ErrorMessage
参数,例如:[Required(ErrorMessage = "My message...")]
是否有类似的验证类型?
谢谢。
最佳答案
不幸的是,Microsoft 没有公开任何接口(interface)来更改默认消息。
但是如果你急于更改这些不友好的消息,你可以通过为 decimal 创建验证属性,创建相应的验证器并最终在应用程序启动时将其注册到 DataAnnotationsModelValidatorProvider 来实现。希望这可以帮助。
更新:
示例如下
第 1 步:创建验证属性
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property, AllowMultiple = false)]
public class ValidDecimalAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
if (value == null || value.ToString().Length == 0) {
return ValidationResult.Success;
}
decimal d;
return !decimal.TryParse(value.ToString(), out d) ? new ValidationResult(ErrorMessage) : ValidationResult.Success;
}
}
第 2 步:创建验证器
public class ValidDecimalValidator : DataAnnotationsModelValidator<ValidDecimal>
{
public ValidDecimalValidator(ModelMetadata metadata, ControllerContext context, ValidDecimal attribute)
: base(metadata, context, attribute)
{
if (!attribute.IsValid(context.HttpContext.Request.Form[metadata.PropertyName]))
{
var propertyName = metadata.PropertyName;
context.Controller.ViewData.ModelState[propertyName].Errors.Clear();
context.Controller.ViewData.ModelState[propertyName].Errors.Add(attribute.ErrorMessage);
}
}
}
第 3 步:在 Global.asax 中的 Application_Start() 方法或 Main() 方法下注册适配器
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ValidDecimal), typeof(ValidDecimalValidator));
第 4 步:最后用这个属性装饰模型中的属性
[ValidDecimal(ErrorMessage = "Only decimal numbers allowed")]
public decimal CPEHours { get; set; }
希望对您有所帮助。
关于c# - 如何更改类型验证错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48349697/