2011-05-20 136 views
0

我正在尝试实现对数据类型的限制。我已经使用DataAnnotations,但对于数据类型,它不显示自定义消息asp.net mvc 3验证数据类型

例如,当我试图输入字符串数据到int类型字段。在这种情况下,我如何定制消息?

+2

请显示您的模型类和您的视图 – hunter 2011-05-20 17:41:03

回答

4

如果我不得不猜测,您听起来像是在验证模型中的一个或多个字段时要显示自定义消息。你也可以继承的DataAnnotations.ValidationAttribute类并重写IsValid(object)方法,最后设置自定义ErrorMessage值(其中ErrorMessage已经属于ValidationAttribute类)

public class SuperDuperValidator : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     bool valid = false; 
     // do your validation logic here 
     return valid; 
    } 
} 

最后,装饰与属性

public class MyClass 
{ 
    [SuperDuperValidator(ErrorMessage="Something is wrong with MyInt")] 
    public int MyInt { get; set; } 
} 
你的模型属性

如果您使用开箱即用的MVC3,则应该只需要对模型进行属性验证(尽管您的模型可能会有所不同/具有更多属性等)。因此,在您的[HttpPost]控制器操作中,MVC将会自动绑定MyClass,您将能够使用ModelState.IsValid来确定发布的数据实际上是否有效。

+0

喜欢验证器名称:) lmao – IamStalker 2011-07-06 08:56:27

2

Pavel,

DataAnnotations DataType属性不影响验证。它用来决定你的输入是如何呈现的。在这种情况下,David的解决方案在上面起作用。

然而,如果你希望只使用内置的验证属性,您可能需要使用这样的范围属性:

[Range(0, 10, ErrorMessage="Please enter a number between 0 and 10")] 
public int MyInt { get ; set ;} 

(当然,你真正应该使用ErrorMessageResourceName /类型参数,并提取出硬编码错误消息字符串到RESX文件)

确保让MVC知道哪里来呈现你的错误信息:

<%= Html.ValidationMessageFor(m => m.MyInt) %> 

或者您可以使用EditorForModel,它会正确设置它。

0

我不认为这已被回答,因为我有同样的问题。

如果您有一个具有int类型属性的模型,并且用户键入了一个“asd”字符串,那么MVC3框架绑定/验证步骤将导致您的视图显示"The value 'asd' is not valid for <model property name or DisplayName here>"

对我来说,海报是要求这个消息,MVC3框架输出定制? 我也想知道。虽然该消息是不是太糟糕,如果你标记你的领域的东西,很容易表示数量预计可能仍然需要包括其他的原因所以说像:

"The value 'asd' is not valid for &lt;fieldname&gt;; must be a positive whole number."

让用户没有进入值之后的值以及每次获取不同的错误消息。