欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-14 15:19:55
经常需要对用户输入的数据在插入数据库或者判断之前做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,确认一下效果

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

将密码后面的空格做trim处理,绑定到viewmodel的时候变成1了:

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

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,确认一下效果

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

将密码后面的空格做trim处理,绑定到viewmodel的时候变成1了:

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

以上所述是小编给大家介绍的asp.net mvc 对所有用户输入的字符串字段做trim处理的方法,希望对大家有所帮助