您的位置:首頁>正文

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

3,將Provider添加到綁定管理庫

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

4,確認一下效果

將密碼後面的空格做Trim處理, 綁定到ViewModel的時候變成1了:

總結

就是這麼簡單,為以後做備忘.

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示