ããä¸ãé对Numericå±æ§/å段é»è®¤éªè¯æ¶æ¯
ããæ们å
æ¥éè¿ä¸ä¸ªç®åçä¾åæ¥éªè¯è¿ä¸ªé®é¢ï¼ä¸ºæ¤æ们å®ä¹äºå¦ä¸ä¸ä¸ªè¡¨ç¤ºå工信æ¯çEmployeeç±»åï¼å
¶ä¸ä»£è¡¨å¹´é¾çAgeå±æ§ç±»å为æ´åã
ãã1: public class Employee
ãã2: {
ãã3: [Display(Name = "å§å")]
ãã4: public string Name { get; set; }
ãã5:
ãã6: [Display(Name = "æ§å«")]
ãã7: public string Gender { get; set; }
ãã8:
ãã9: [Display(Name = "å¹´é¾")]
ãã10: public int Age { get; set; }
ãã11: }
ããæ们å建ä¸ä¸ªModelç±»å为EmployeeçView对æ个å
åå·¥çä¿¡æ¯è¿è¡ä¿®æ¹ãå¦ä¸å¾æ示ï¼å½æ们è¾å
¥ä¸ä¸ªéæ°åå符串ä½ä¸ºAgeå段çæ¶åï¼éªè¯é误信æ¯æ¾ç¤ºä¸ºâThe field å¹´é¾ must be a numberâï¼å¼å¾ä¸æçæ¯ï¼å½å线ç¨çCurrentUICulture为zh-CNã
ããimage
ããäºãé»è®¤çéªè¯æ¶æ¯æ¥æºäºä½å¤ï¼
ããé对æ°åç±»åå段è¿è¡éªè¯çæ¯ä¸ä¸ªå称为NumericModelValidatorçModelValidatorï¼ä¸è¿è¿æ¯ä¸ªå®ä¹å¨System.Web.Mvcç¨åºéä¸ä¿å
é¨ç±»åãå¦æéç¨Reflectoræ¥çå
¶å®ä¹ï¼å¯ä»¥åç°ç¨äºè¿åé误æ¶æ¯çæ¹æ³æ¯ä¸ä¸ªå为MakeErrorStringçéææ¹æ³ãå¦ä¸é¢ç代ç æ示ï¼ä½ä¸ºé误æ¶æ¯çå符串æ¥æºäºå
åµäºç¨åºéä¸çèµæºæ件ã
ãã1: internal sealed class NumericModelValidator : ModelValidator
ãã2: {
ãã3: //å
¶ä»æå
ãã4: private static string MakeErrorString(string displayName)
ãã5: {
ãã6: return string.Format(CultureInfo.CurrentCulture, MvcResources.ClientDataTypeModelValidatorProvider_FieldMustBeNumeric, new object[] { displayName });
ãã7: }
ãã8: }
ããNumericModelValidatoræç»æ¯éè¿ClientDataTypeModelValidatorProviderè¿ä¸ªä¸ä¸ªModelValidatorProvideræä¾çã
ããä¸ãéè¿èªå®ä¹ModelValidatorProvideræ¿æ¢NumericModelValidator
ããå¦ææ们æ³æ¹åå
é¨ç±»åNumericModelValidatorçé误æ¶æ¯ï¼å¯ä»¥éè¿å°ClientDataTypeModelValidatorProvideræä¾çNumericModelValidatoræ¿æ¢æå¦ä¸ä¸ªModelValidatorãå¨è¿éæ们æ¿æ¢çæ¯ä¸ä¸ªDataAnnotationsModelValidatorï¼èå®åºäºçValidationAttributeæ¯æ们èªå®ä¹çNumericAttributeã
ããå¦ä¸é¢ç代ç çææ示ï¼å
é¨ç±»åNumericAttributeæ¯ValidationAttributeçåç±»ï¼å¹¶ä¸å®ç°äºIClientValidatableæ¥å£ãå¨è¿éæä¹åªèè客æ·ç«¯éªè¯ï¼æ以éåçIsValidæ¹æ³ç´æ¥è¿åTrueï¼èGetClientValidationRulesæ¹æ³åè¿åä¸ä¸ªå
å«ä¸ä¸ªéªè¯ç±»å为ânumberâçModelClientValidationRule对象çéåãæ们使ç¨FormatErrorMessageæ¹æ³æ ¼å¼ååçå符串ä½ä¸ºModelClientValidationRuleçErrorMessageå±æ§ã
ãã1: internal class NumericAttribute : ValidationAttribute, IClientValidatable
ãã2: {
ãã3: public override bool IsValid(object value)
ãã4: {
ãã5: return true;
ãã6: }
ãã7: public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
ãã8: {
ãã9: yield return new ModelClientValidationRule { ValidationType = "number", ErrorMessage = this.FormatErrorMessage(metadata.DisplayName)};
ãã10: }
ãã11: }
ããç°å¨æ们éè¦åçå°±æ¯éè¿ä¸ä¸ªèªå®ä¹ModelValidatorProviderå°ClientDataTypeModelValidatorProvideræä¾çNumericModelValidatoræ¿æ¢æåºäºNumericAttributeçDataAnnotationsModelValidatorï¼æ以æ们å®ä¹äºä¸ä¸ªç´æ¥ç»§æ¿èªClientDataTypeModelValidatorProviderçFilterableClientDataTypeModelValidatorProviderãå¦ä¸é¢ç代ç æ示ï¼å¨éåçGetValidatorsæ¹æ³ä¸æ们å®æäºé对NumericModelValidatorçæ¿æ¢ã对äºè¢«å建çNumericAttributeæ¥è¯´ï¼æ们æå®çé误æ¶æ¯ä¹å®ä¹å¨Resourceæ件ä¸ï¼ä¸ºäºæä¾å¤è¯è¨çæ¯æï¼ï¼èåºäºzhçå
容为â{0}å¿
é¡»æ¯ä¸ä¸ªæ°åï¼âã
ãã1: public class FilterableClientDataTypeModelValidatorProvider : ClientDataTypeModelValidatorProvider
ãã2: {
ãã3: public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
ãã4: {
ãã5: var allValidators = base.GetValidators(metadata, context);
ãã6: var validators = new List<ModelValidator>();
ãã7: foreach (var v in allValidators)
ãã8: {
ãã9: if (v.GetType().Name != "NumericModelValidator")
ãã10: {
ãã11: validators.Add(v);
ãã12: }
ãã13: else
ãã14: {
ãã15: NumericAttribute attribute = new NumericAttribute{ ErrorMessage = Resources.FieldMustBeNumeric};
ãã16: DataAnnotationsModelValidator validator = new DataAnnotationsModelValidator(metadata, context, attribute);
ãã17: validators.Add(validator);
ãã18: }
ãã19: }
ãã20: return validators;
ãã21: }
ãã22: }
ããåã注åèªå®ä¹ModelValidatorProvider
ããç°å¨æ们åªéè¦éè¿ModelValidatorProviderç注å让æ们èªå®ä¹çFilterableClientDataTypeModelValidatorProvideræ¿æ¢é»è®¤çClientDataTypeModelValidatorProviderãå¨Global.asaxä¸ï¼é对FilterableClientDataTypeModelValidatorProviderç注åå¯ä»¥éè¿å¦ä¸ç代ç æ¥å®æã
ãã1: public class MvcApplication : System.Web.HttpApplication
ãã2: {
ãã3: //å
¶ä»æå
ãã4: protected void Application_Start()
ãã5: {
ãã6: //å
¶ä»æä½
ãã7: var clientDataTypeValidator = ModelValidatorProviders.Providers.OfType<ClientDataTypeModelValidatorProvider>().FirstOrDefault();
ãã8: if (null != clientDataTypeValidator)
ãã9: {
ãã10: ModelValidatorProviders.Providers.Remove(clientDataTypeValidator);
ãã11: }
ãã12: ModelValidatorProviders.Providers.Add(new FilterableClientDataTypeModelValidatorProvider());
ãã13: }
ãã14: }
温馨提示:内容为网友见解,仅供参考
如何定制Numeric属性\/字段验证消息
一、针对Numeric属性\/字段默认验证消息 我们先来通过一个简单的例子来验证这个问题,为此我们定义了如下一个表示员工信息的Employee类型,其中代表年龄的Age属性类型为整型。1: public class Employee 2: { 3: [Display(Name = "姓名")]4: public string Name { get; set; } 5:6: [Disp...
SQL数据库中Numeric(10,2)是什么意思?
SQL数据库中Numeric(10,2)是指字段是数值型,Numeric(10,2)表示总位数为10,小数点后为2位的数,也就是说这个字段的整数位最大是8位。SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型 numeric(p,s) p 为精度(有效位),表示可储存数值的最大位数,小数点左右两侧都包括在内,...
c# winforms NumericUpDown 关于值的验证问题
Maximun也绑定到数据上不就行了 我真不知道你需要问的是什么,你是控件使用有问题还是?如果你用了绑定了而且用了属性就不要用ValueChanged了
SQL数据库中Numeric(10,2)是什么意思?
4、逻辑型(BIT)如果使用复选框(CHECKBOX)从网页中搜集信息,可以把此信息存储在BIT型字段中。BIT型字段只能取两个值:0或1。注意,在创建好一个表之后,不能向表中添加BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。5、日期型(DATETIMEVSSMALLDATETIME)一个DATETIME型的...
SQL数据库中Numeric(10,2)是什么意思?
二、文本型TEXT使用文本型数据,可以存放超过二十亿个字符的字符串。当需要存储大串的字符时,应该使用文本型数据。三、数值型SQL支持许多种不同的数值型数据。可以存储整数 INT 、小数 NUMERIC、和钱数 MONEY。四、逻辑型 如果使用复选框( CHECKBOX)从网页中搜集信息,可以把此信息存储在BIT型字段中...
正则表达式:(.*?) 获取的内容如何才能不含和
1、RegExp对象是最重要的一个对象,它有几个属性,其中: ○Global 属性,设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 False。 ○IgnoreCase 属性,设置或返回一个Boolean值,指明模式搜索...
access某表时间字段里的有效性规则为只能输入系统日期前一年五月一日...
文本型(Text):默认数据类型,最多255个字符,常用于存储字符信息,如姓名、地址等。通过设置“字段大小”可以限制输入字符数。备注型(Memo):可存储大量文本,最多65,535个字符,适合详细描述或个人简历等较长内容。数字型(Numeric):包括整型、长整型、字节型、单精度型和双精度型,用于数值运算。
sql排序问题,字符串中有全数字和含中文的, 要求全数字的转换成整数排...
使用 ISNUMERIC函数就可以了,order by ISNUMERIC(字段),case when ISNUMERIC(字段)=0 then 0 else cast(字段 as bigint) end 还有小数的!!晕。那就把bigint改成 float order by ISNUMERIC(字段),case when ISNUMERIC(字段)=0 then 0 else cast(字段 as float) end ...
yii框架中rulees函数中的safe是怎样用的呢?
required”,这种的就是必填,“numeric”这种就是数字一样,因为对于yii的对象的属性赋值然后进行保存的时候会进行验证,如果字段在这个rules里面不存在,那么报错的时候这个字段对应的值是保存不进去的,这个时候如果这个字段不想被验证,那么一般情况下就会放在safe里面,表示是安全字段。
将数据类型 varchar 转换为 numeric 时出错
numeric 是数值类型,看你插入的都是字符..所以,你要在有numeric那一列插入数值.