Asp.net MVC如何对所有用户输入的字符串字段做Trim处理

Tama ·
更新时间:2024-09-20
· 661 次阅读

  经常需要对用户输入的数据在插入数据库或者判断之前做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了:

  总结   是这么简单,为以后做备忘.



输入 net trim 字符串 字段 MVC ASP asp.net mvc ASP.NET 字符

需要 登录 后方可回复, 如果你还没有账号请 注册新账号