Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 自定义验证消息_Asp.net Mvc 3_Validation_Custom Data Attribute - Fatal编程技术网

Asp.net mvc 3 自定义验证消息

Asp.net mvc 3 自定义验证消息,asp.net-mvc-3,validation,custom-data-attribute,Asp.net Mvc 3,Validation,Custom Data Attribute,我在验证某些数据类型时遇到问题。 除字符串外,还有int、short、DateTime等。 假设我的视图模型类中有以下属性 public int? LineNumber { get; set; } 当我输入不正确的值时,我得到mvc错误“值'balblabl'对LineNumber无效。” 但如果我只想说“值不正确”之类的话呢?或者如果我想用其他语言怎么办?我不知道怎么做(当然我可以用string代替int,但这是一个痛苦的解决办法) 我已经尝试了dataannotationsextensio

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

public int? LineNumber { get; set; }
当我输入不正确的值时,我得到mvc错误“值'balblabl'对LineNumber无效。”

但如果我只想说“值不正确”之类的话呢?或者如果我想用其他语言怎么办?我不知道怎么做(当然我可以用string代替int,但这是一个痛苦的解决办法)


我已经尝试了dataannotationsextensions
[dataannotationsextensions.Integer(ErrorMessage=“请输入一个有效的数字。”)]
属性。它不起作用。我无法使用自定义验证属性,因为在活页夹转换后,我在所有情况下都会使用不正确的值获取空值。我只是不能自己验证。我可以自己写活页夹,但这看起来像个笑话。实际上,我认为自定义验证消息是必须具备的功能之一,我不能相信asp.net mvc没有一种简单的方法来实现它

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

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

DefaultModelBinder.ResourceClassKey = "MyResources";
在默认模型绑定器的属性ResourceClassKey中设置自定义资源文件后,将根据以下条件解析值:

  • 如果未设置属性,MVC将使用标准MVC资源

  • 如果属性设置为无效的类键(例如资源 文件),MVC抛出异常

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

  • 如果设置了属性且指定的资源可用, MVC使用文件中的资源


  • 如果您需要知道特定消息的键值。对于消息值“{0}”对{1}无效,您需要添加一个键为DefaultModelBinder_ValueInvalid的值。当默认模型绑定器无法将输入字符串解析为其目标类型时,这些错误将由默认模型绑定器自动添加。它们与数据注释不同,在数据注释中,您可以指定一个资源,而不是一个harcoded字符串错误消息

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

    DefaultModelBinder.ResourceClassKey = "MyResources";
    
    在默认模型绑定器的属性ResourceClassKey中设置自定义资源文件后,将根据以下条件解析值:

  • 如果未设置属性,MVC将使用标准MVC资源

  • 如果属性设置为无效的类键(例如资源 文件),MVC抛出异常

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

  • 如果设置了属性且指定的资源可用, MVC使用文件中的资源


  • 如果您需要知道特定消息的键值。对于消息值“{0}”对{1}无效,您需要添加一个键为DefaultModelBinder_ValueInvalid的值。我认为,我想添加另一个简单的方法来添加和维护自定义错误消息。 使用NuGet包。
    它与mvc的连接非常简单,请看一看

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

    public class CreateProductCommandValidator : AbstractValidator<CreateProductCommand>
        {
            public CreateAgendaPointCommandValidator()
            {
                RuleFor(cmd => cmd.price)
                    .NotEmpty()
                    .WithMessage(Translations.CreateProduct_Price)
    
            }
        }
    }
    
    公共类CreateProductCommandValidator:AbstractValidator
    {
    公共CreateAgendPointCommandValidator()
    {
    规则(cmd=>cmd.price)
    .NotEmpty()
    .WithMessage(Translations.CreateProduct\u Price)
    }
    }
    }
    

    文档:

    我想添加另一种,我认为是添加和维护自定义错误消息的简单方法。 使用NuGet包。
    它与mvc的连接非常简单,请看一看

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

    public class CreateProductCommandValidator : AbstractValidator<CreateProductCommand>
        {
            public CreateAgendaPointCommandValidator()
            {
                RuleFor(cmd => cmd.price)
                    .NotEmpty()
                    .WithMessage(Translations.CreateProduct_Price)
    
            }
        }
    }
    
    公共类CreateProductCommandValidator:AbstractValidator
    {
    公共CreateAgendPointCommandValidator()
    {
    规则(cmd=>cmd.price)
    .NotEmpty()
    .WithMessage(Translations.CreateProduct\u Price)
    }
    }
    }
    
    文件: