2011-09-08 69 views
4

此问题之前已被询问过,但我认为搜索条件对我来说太过笼统,无法找到我正在寻找的答案,所以我会再问一次。如果用户在int字段中输入非数字字符串,则会自定义验证错误消息

我有一个int属性和范围注释模型。

如果用户输入的内容不是int,验证消息以The value '<bad data>' is not valid for '<property name>'作为响应......这很好,但我想提供更多的反馈信息,即Expecting an integer value in this field.

由于此验证失败之前,其他验证程序看一看,我不知道如何(或者如果有可能)覆盖默认验证器消息。

我有什么选择?

每个请求,我张贴的代码,但不是很多吧:

[Range(0,65535, ErrorMessage="Port must be between 0 and 65535.")] 
public int Port { get; set; } 

存在着发生到达RangeAttribute之前验证。我想用我自己选择的一个替换默认消息。

+0

发布包含注释的int声明的实际代码。 – Cymen

+0

完成,虽然我不知道它会做多少好事。 –

回答

3

如果您使用的是标准的注释,你应该能够像这样重写错误消息:

[MyAnnotation(...., ErrorMessage = "My error message")] 
public int myInt { get; set; } 

还是你真正想要追加到默认的错误消息,而不是取代它的(不清楚问题)?

更新:误读 - 表明这为答案:How to change the ErrorMessage for int model validation in ASP.NET MVC?或更好,但How to change 'data-val-number' message validation in MVC while it is generated by @Html helper

+0

验证错误消息发生在验证器之前。 –

+0

啊!误读 - 我想你想这个然后:http://stackoverflow.com/questions/6587816/how-to-change-the-errormessage-for-int-model-validation-in-asp-net-mvc – Cymen

+1

这是另一种选择 - 它实际上也有一个公认的答案:http://stackoverflow.com/questions/4828297/how-to-change-data-val-number-message-validation-in-mvc-while-it-generate-他/ 6405298#6405298 – Cymen

1

阅读this question。在OP建议的链接中,您将找到替换使用该框架的deafult错误字符串的方法,而在答案中,如果您想要更改所有这些字符串,则会在其他资源中找到linnk。也请看here。希望它有帮助

+0

是的,更新资源文件是离我最远的;此外,由于不同的类型转换错误,它似乎不支持分支。 –

+0

猜你必须编写自己的扩展名,就像你已经找到的答案一样。对不起 – Iridio

3

你也可以在模型类中继承IValidatableObject。您可以在Validate方法中写下您所需的逻辑。请在下面找到示例代码。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 

namespace MvcApplication1.Models 
{ 
    public class Alok : IValidatableObject 
    { 
     [Display(Name = "Property1")] 
     [Required(AllowEmptyStrings = false, ErrorMessage = "Property1 is required.")] 
     public int Property1 { get; set; } 

     [Display(Name = "Property2")] 
     [Required(AllowEmptyStrings = false, ErrorMessage = "Property2 is required.")] 
     public int Property2 { get; set; } 

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
     { 
      if (Property1 < Property2) 
      { 
       yield return new ValidationResult("Property 1 can't be less than Property 2."); 
      } 
     } 
    } 
} 
+1

我不认为这会奏效。验证错误在“官方”验证之前的映射时间添加到模型中。 –

相关问题