1

我在验证某些数据类型时遇到问题。除字符串外,还有 int、short、DateTime 等。假设我的视图模型类中有以下属性

public int? LineNumber { get; set; }

当我输入不正确的值时,我得到 mvc 错误“值 'balblabl' 对 LineNumber 无效。”

但是,如果我只想输出“值不正确”之类的内容怎么办?或者如果我想使用其他语言怎么办?我不知道该怎么做(当然我可以使用 string 而不是 int 但这是一种痛苦的解决方法)

我已经尝试过 dataannotationsextensions [DataAnnotationsExtensions.Integer(ErrorMessage = "Please enter a valid number.")]属性。它不工作。我不能使用自定义验证属性,因为在活页夹转换之后,我在所有情况下都得到了空值,并且值不正确。我只是不能做我自己的验证。我可以编写自己的活页夹,但它看起来像个笑话。真的,我认为自定义验证消息是必须具备的功能之一,我不能相信 asp.net mvc 没有简单的方法来做到这一点。

4

2 回答 2

1

在我看来,我想添加另一种简单的方法来添加和维护自定义错误消息。使用FluentValidation NuGet 包。
它很容易与 mvc 连接,看看这里

您可以轻松地为模型指定大量规则并显示可以使用资源文件的自定义错误消息,例如:

public class CreateProductCommandValidator : AbstractValidator<CreateProductCommand>
    {
        public CreateAgendaPointCommandValidator()
        {
            RuleFor(cmd => cmd.price)
                .NotEmpty()
                .WithMessage(Translations.CreateProduct_Price)

        }
    }
}

文档:FluentValidationDocumentation

于 2012-12-31T09:42:24.957 回答
0

当默认模型绑定器无法将输入字符串解析为其目标类型时,这些错误会自动添加。它们不像数据注释,您可以在其中指定资源而不是硬编码的字符串错误消息。

但是,您可以使用自己的资源文件,请参阅this other question。创建资源文件后,您将更新 global.asax 以供默认模型绑定器使用它:

DefaultModelBinder.ResourceClassKey = "MyResources";

在默认模型绑定器的属性 ResourceClassKey 中设置自定义资源文件后,将根据以下标准解析值(根据 MSDN)

  1. 如果未设置该属性,则 MVC 使用标准 MVC 资源。

  2. 如果该属性设置为无效的类键(例如不存在的资源文件),则 MVC 将引发异常。

  3. 如果设置了属性并且类键存在但文件中的资源名称在应用程序中不存在,则 MVC 使用标准 MVC 资源。

  4. 如果设置了属性并且指定的资源可用,则 MVC 使用文件中的资源。

如果您需要知道特定消息的键值,请检查此。对于消息值“{0}”对于 {1} 无效。,您将需要使用键 DefaultModelBinder_ValueInvalid 添加一个值

于 2012-12-26T20:38:32.630 回答