当前位置: 移动技术网 > IT编程>开发语言>.net > Asp.net MVC 对所有用户输入的字符串字段做Trim处理的方法

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

2017年12月08日  | 移动技术网IT编程  | 我要评论

野钓鲫鱼技巧,瑞士鹿喜微断食纤体,高频直流电源

经常需要对用户输入的数据在插入数据库或者判断之前做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处理的方法,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网