Asp.net MVC 對輸入的字串欄位做Trim處理的方法_實用技巧

來源:互聯網
上載者:User
這篇文章主要介紹了Asp.net MVC 如何對所有使用者輸入的字串欄位做Trim處理,需要的朋友可以參考下

經常需要對使用者輸入的資料在插入資料庫或者判斷之前做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了:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.