asp.net-mvc – ASP.NET MVC – 值类型的自定义验证消息
发布时间:2020-05-23 11:50: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 – 如何使用存储库模式处理表关系?
- asp.net-mvc – ASP.NET MVC中的动态(运行时生成)表单
- ASP.Net 4中ClientIDMode的正确设置是什么,以获得ASP.Net 2
- asp.net-mvc – 如何使用actionresult返回视图和部分视图
- 在Asp.Net中使用JQuery绑定DropDownlists
- 如何在ASP.NET Core 2.0中设置多个身份验证方案?
- asp.net-mvc – 确保视图存在
- asp.net-mvc – 当action等于默认路由值时,MVC ActionLink省
- 收藏的asp.net文件上传类源码
- asp.net媒体保护
推荐文章
站长推荐
- asp.net-mvc – 我可以在MVC 3中有/多个_Layout页
- asp.net-mvc – 我可以从服务器端的持票令牌中检
- ASP.NET MembershipProvider加密/解密
- asp.net中.aspx页面中各种符号的含义
- asp.net-mvc – 如何禁用自动完成在MVC Html助手
- .net – HttpHandler在IIS 7中不起作用
- asp.net – 使用installshield在安装后运行解决方
- asp.net – 为什么%=%标记呈现为“%=%”?
- asp.net-mvc – ASP.NET MVC;使用EditorTemplate
- asp.net – 在剃刀中等同于End / Response.End?
热点阅读
