我试图在数据类型上实现价值。我使用过DataAnnotations,但是对于数据类型,它没有显示自定义消息
例如,当我尝试将字符串数据输入到int类型字段时。在这种情况下我如何自定义消息?
答案 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 <fieldname>; must be a positive whole number."
因此,用户不会在值之后输入值,并且每次都会收到不同的错误消息。