深圳.net培训
达内深圳罗湖中心

186-8884-0703

热门课程

Asp.net MVC 字符串字段做Trim处理的方法_深圳达内龙岗校区

  • 时间:2017-07-31
  • 发布:深圳.net培训班
  • 来源:达内新闻

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

12345678910

11

12

13

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

?

12345678910

11

12

13

14

15

16

17

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添加到绑定管理库

?

1234services.AddMvc().AddMvcOptions(s =>

  {

    s.ModelBinderProviders[s.ModelBinderProviders.TakeWhile(p => !(p is ComplexTypeModelBinderProvider)).Count()] = new TrimModelBinderProvider();  });

4,确认一下效果

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


达内深圳校区温馨提示:如果你在阅读文章时碰到什么不清楚或不明白的地方,可以进行在线咨询;如果你需要报名,也可以通过在线预约,我们将免费为你安排,或者关注深圳达内微信公众平台:tarenasz(更多内容请点击:深圳.net培训



深圳达内
上一篇:深入理解Asp.Net中WebForm的生命周期_深圳达内龙岗校区
下一篇:Asp.Net Core简介与安装教程_深圳达内龙岗校区

.NET应用程序调试—原理、工具、方法(多图+精华)

老外编辑带你迈出自己容器化的第一步

四个月他们凭什么月薪上万?

.net的五层架构

选择城市和中心
贵州省

广西省

海南省

台湾