Asp.net MVC 对所有用户输入的字符串字段做Trim处理的方法
程序员文章站
2023-11-09 12:59:16
经常需要对用户输入的数据在插入数据库或者判断之前做trim处理,针对每个viewmodel的字段各自做处理是我们一般的想法。最近调查发现其实也可以一次性实现的。
mvc4...
经常需要对用户输入的数据在插入数据库或者判断之前做trim处理,针对每个viewmodel的字段各自做处理是我们一般的想法。最近调查发现其实也可以一次性实现的。
mvc4.6中实现方式
1,实现imodelbinder接口,创建自定义modelbinder。
public class trimmodelbinder : imodelbinder { public object bindmodel(controllercontext controllercontext, modelbindingcontext bindingcontext) { var valueresult = bindingcontext.valueprovider.getvalue(bindingcontext.modelname); string attemptedvalue = valueresult?.attemptedvalue; return string.isnullorwhitespace(attemptedvalue) ? attemptedvalue : attemptedvalue.trim(); } }
2,添加modelbinder到mvc的绑定库。
protected void application_start() { //system.web.mvc.modelbinders.binders.defaultbinder = new modelbinders.trimmodelbinder(); system.web.mvc.modelbinders.binders.add(typeof(string), new modelbinders.trimmodelbinder()); arearegistration.registerallareas(); filterconfig.registerglobalfilters(globalfilters.filters); routeconfig.registerroutes(routetable.routes); bundleconfig.registerbundles(bundletable.bundles); }
3,确认一下效果
将密码后面的空格做trim处理,绑定到viewmodel的时候变成1了:
asp.net core 1.1 mvc中实现方式
1,自定义modelbinder并继承complextypemodelbinder
public class trimmodelbinder : complextypemodelbinder { public trimmodelbinder(idictionary propertybinders) : base(propertybinders) { } protected override void setproperty(modelbindingcontext bindingcontext, string modelname, modelmetadata propertymetadata, modelbindingresult result) { var value = result.model as string; result= string.isnullorwhitespace(value) ? result : modelbindingresult.success(value.trim()); base.setproperty(bindingcontext, modelname, propertymetadata, result); } }
2,为modelbinder添加自定义provider
public class trimmodelbinderprovider : imodelbinderprovider { public imodelbinder getbinder(modelbinderprovidercontext context) { if (context.metadata.iscomplextype && !context.metadata.iscollectiontype) { var propertybinders = new dictionary(); for (int i = 0; i < context.metadata.properties.count; i++) { var property = context.metadata.properties[i]; propertybinders.add(property, context.createbinder(property)); } return new trimmodelbinder(propertybinders); } return null; } }
3,将provider添加到绑定管理库
services.addmvc().addmvcoptions(s => { s.modelbinderproviders[s.modelbinderproviders.takewhile(p => !(p is complextypemodelbinderprovider)).count()] = new trimmodelbinderprovider(); });
4,确认一下效果
将密码后面的空格做trim处理,绑定到viewmodel的时候变成1了:
以上所述是小编给大家介绍的asp.net mvc 对所有用户输入的字符串字段做trim处理的方法,希望对大家有所帮助