asp.net-mvc – ASP.NET MVC – 值类型的自定义验证消息
发布时间:2020-12-15 18:46:43 所属栏目:asp.Net 来源:网络整理
导读:当我使用UpdateModel或TryUpdateModel时,MVC框架足够聪明,可以知道您是否尝试将null转换为值类型(例如用户忘记填写所需的出生日期字段)。 不幸的是,我不知道如何覆盖默认消息,“需要一个值”。在总结中变成更有意义的东西(“请输入你的出生日”)。 必须
当我使用UpdateModel或TryUpdateModel时,MVC框架足够聪明,可以知道您是否尝试将null转换为值类型(例如用户忘记填写所需的出生日期字段)。
不幸的是,我不知道如何覆盖默认消息,“需要一个值”。在总结中变成更有意义的东西(“请输入你的出生日”)。 必须有一种方法(不需要编写太多的解决方法),但是我找不到。任何帮助? 编辑 此外,我猜这也是无效转换的问题,例如BirthDay =“你好”。 解决方法
通过扩展DefaultModelBinder来建立自己的ModelBinder:
public class LocalizationModelBinder : DefaultModelBinder 覆盖SetProperty: base.SetProperty(controllerContext,bindingContext,propertyDescriptor,value); foreach (var error in bindingContext.ModelState[propertyDescriptor.Name].Errors. Where(e => IsFormatException(e.Exception))) { if (propertyDescriptor.Attributes[typeof(TypeErrorMessageAttribute)] != null) { string errorMessage = ((TypeErrorMessageAttribute)propertyDescriptor.Attributes[typeof(TypeErrorMessageAttribute)]).GetErrorMessage(); bindingContext.ModelState[propertyDescriptor.Name].Errors.Remove(error); bindingContext.ModelState[propertyDescriptor.Name].Errors.Add(errorMessage); break; } } 添加函数bool IsFormatException(Exception e)来检查Exception是否为FormatException: if (e == null) return false; else if (e is FormatException) return true; else return IsFormatException(e.InnerException); 创建一个属性类: [AttributeUsage(AttributeTargets.All,Inherited = false,AllowMultiple = false)] public class TypeErrorMessageAttribute : Attribute { public string ErrorMessage { get; set; } public string ErrorMessageResourceName { get; set; } public Type ErrorMessageResourceType { get; set; } public TypeErrorMessageAttribute() { } public string GetErrorMessage() { PropertyInfo prop = ErrorMessageResourceType.GetProperty(ErrorMessageResourceName); return prop.GetValue(null,null).ToString(); } } 将属性添加到要验证的属性中: [TypeErrorMessage(ErrorMessageResourceName = "IsGoodType",ErrorMessageResourceType = typeof(AddLang))] public bool IsGood { get; set; } AddLang是一个resx文件,IsGoodType是资源的名称。 最后将其添加到Global.asax.cs Application_Start中: ModelBinders.Binders.DefaultBinder = new LocalizationModelBinder(); 干杯! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-2 – 将模型数据传递给外部javascript
- 如何利用ETW(Event Tracing for Windows)记录日志
- asp.net-mvc – ASP.Net MVC,ViewPage和EditorFor / LabelF
- 全局本地化验证
- asp.net – 数据绑定下拉列表 – 初始值
- asp.net-mvc – 在asp.net mvc请求中捕获windows用户名
- .net – 索引和长度必须指向字符串中的位置?
- asp.net-mvc-3 – ASP.NET MVC3条件验证EditorTemplate的嵌
- asp.net-mvc – MissingMethodException:“此对象没有无参
- strings、strconv:让你高效的处理字符串
推荐文章
站长推荐
- asp.net – 用户控件托管在IE中呈现为一个文本框
- asp.net应用程序如何工作?
- asp.net-mvc – 调用dropdownlist选择的值为@htm
- asp.net-mvc – asp.net MVC OutputCache属性的默
- asp.net-mvc – ViewBag在RedirectToAction之后为
- asp.net-core – 替换ASP.NET Core 1.0中间件中的
- ASP.NET MVC ViewModel模式
- asp.net – 将会话变量传递给SQLDataSource时出错
- asp.net – 在.aspx页面上显示图像的字节
- 如何动态更改整个ASP.NET应用程序的主题?
热点阅读