asp.net mvc 3验证数据类型

时间:2011-05-20 17:18:46

标签: asp.net-mvc asp.net-mvc-3

我试图在数据类型上实现价值。我使用过DataAnnotations,但是对于数据类型,它没有显示自定义消息

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

3 个答案:

答案 0 :(得分: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,那么您应该只需要对模型进行财产验证(尽管您的模型可能会有所不同/有更多属性等)所以,在{{1}中控制器动作,MVC将自动绑定[HttpPost],您将能够使用MyClass来确定发布的数据是否实际上是有效的。

答案 1 :(得分:2)

的Pavel,

DataAnnotations DataType属性不会影响验证。它用于决定输入的呈现方式。在这种情况下,David的解决方案可以解决。

但是,如果您只想使用内置验证属性,则可能需要使用Range属性,如下所示:

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

(当然,您应该使用ErrorMessageResourceName / Type参数并将硬编码的错误消息字符串提取到resx文件中。)

确保让MVC知道在哪里呈现错误消息:

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

或者您可以使用EditorForModel并将其正确设置。

答案 2 :(得分: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."

因此,用户不会在值之后输入值,并且每次都会收到不同的错误消息。