经常需要对用户输入的数据在插入数据库或者判断之前做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处理的方法实例全部内容,希望文章能够帮你解决Asp.net MVC 对用户输入的字符串做Trim处理的方法实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)