我在验证某些数据类型时遇到问题。 除了string之外,还有int,short,DateTime等。 假设我的视图模型类中有以下属性
public int? LineNumber { get; set; }
当我输入错误值时,我得到mvc错误“值'balblabl'对LineNumber无效。”
但是,如果我只想要“价值不正确”之类的话怎么办?或者,如果我想使用其他语言怎么办?我不知道该怎么做(当然我可以使用字符串而不是int,但这是一种痛苦的解决方法)
我已经尝试过dataannotationsextensions [DataAnnotationsExtensions.Integer(ErrorMessage = "Please enter a valid number.")]
属性。它不起作用。我不能使用自定义验证属性,因为在粘合剂转换后,我在所有情况下都得到null值,值不正确。我只是不能做自己的验证。我可以写自己的活页夹,但它看起来像个笑话。真的我认为自定义验证消息是必须有featerus之一,我不能相信asp.net mvc没有一个简单的方法来做到这一点。
答案 0 :(得分:1)
我想在我看来添加另一个添加和维护自定义错误消息的简单方法。
使用FluentValidation NuGet包。
它与mvc挂钩很容易看看here
您可以轻松为模型指定大量规则,并显示可以使用资源文件的自定义错误消息示例:
public class CreateProductCommandValidator : AbstractValidator<CreateProductCommand>
{
public CreateAgendaPointCommandValidator()
{
RuleFor(cmd => cmd.price)
.NotEmpty()
.WithMessage(Translations.CreateProduct_Price)
}
}
}
答案 1 :(得分:0)
当默认模型绑定器无法将输入字符串解析为其目标类型时,这些错误会自动添加。它们与数据注释不同,您可以在其中指定资源而不是编码的字符串错误消息。
但是,您可以使用自己的资源文件,请参阅此other question。创建资源文件后,您将更新默认模型绑定器的global.asax以使用它:
DefaultModelBinder.ResourceClassKey = "MyResources";
在默认模型绑定器的属性ResourceClassKey中设置了自定义资源文件后,将根据以下条件(as per the MSDN)解析值:
如果未设置该属性,MVC将使用标准MVC资源。
如果属性设置为无效的类键(例如资源) 文件不存在),MVC抛出异常。
如果设置了属性且类密钥存在但资源不存在 文件中的名称在应用程序中不存在,MVC使用 标准的MVC资源。
如果设置了属性并且指定的资源可用, MVC使用文件中的资源。
如果您需要知道特定消息check this的键值。对于消息值“{0}”对{1}无效。,您需要使用键DefaultModelBinder_ValueInvalid
添加值