2012-04-05 104 views
1

我创建了以下属性:DataTypeAttribute是显示错误信息

public class SpecificDataTypeAttribute : DataTypeAttribute 
{ 
    public SpecificDataType(DataType dataType, string field) 
     : base(dataType) 
    { 
     this.ErrorMessage = string.Format("{0} {1}", field, Messages.SpecificDataTypeAttribute); 
    } 
} 

而且使用像:

[SpecificDataType(DataType.DateTime, "Initial date")] 
public DateTime? InitialDate { get; set; } 

所以,这就是在Messages.SpecificDataTypeAttribute消息是"is in a incorrect format."。当我在InitialDate中输入错误的日期时,我得到了默认错误:"The value '12' is not valid for InitialDate."。为什么?我把断点和代码调用SpecificDataType ctor。

+0

我想这是因为'DateTime?'实际上是'可空'而不是普通的'DateTime'。如果你声明的初始日期为'public DateTime InitialDate {get; set;}' – 2012-04-05 12:15:31

+0

没有任何改变,看看它是否工作。保持相同的错误。 – 2012-04-05 12:26:14

+0

啊,我没有真正阅读你的问题与理解:)我以前的评论可以被抓。无论如何,我现在所拥有的最多是一个模糊的理论,并不知道如何规避这个问题,所以我会把话题留给比我更聪明的人。 :) – 2012-04-05 12:41:49

回答

1

你会走错方向 - 在asp.net mvc中,DataTypeAttribute没有定义验证规则。它或多或少像UIHintAttribute - 帮助指定在编辑或显示模式下渲染属性时使用哪个模板。

看看this answer了解定制验证消息的系统类型

PropertyValueInvalid值进行格式化,带的{0}无效值替换,{1}的属性名。因此,您可以将其定义为

{1} is in invalid format

+0

用这种方法我更改默认消息。但是,我怎么能把字段名称在消息中? – 2012-04-05 14:41:49

+0

@ViniciusOttoni看看更新 – archil 2012-04-05 15:01:40

+0

我遇到了问题。在VS工作正常,但是当我在测试机器上发布项目时,不断显示默认消息。 – 2012-04-05 17:56:48