Asp.net MVC 如何對所有使用者輸入的字串欄位做Trim處理

來源:互聯網
上載者:User

標籤:return   medium   type   sys   判斷   4.6   filter   val   ext   

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.