Maison  >  Article  >  développement back-end  >  Exemple de méthode Asp.net MVC permettant de couper la chaîne saisie par l'utilisateur

Exemple de méthode Asp.net MVC permettant de couper la chaîne saisie par l'utilisateur

零下一度
零下一度original
2017-06-19 09:58:281696parcourir

Cet article présente principalement comment Asp.net MVC supprime tous les champs chaîne saisis par l'utilisateur. Les amis dans le besoin peuvent se référer à

Il est souvent nécessaire de couper. les données saisies par l'utilisateur avant d'insérer les données dans la bibliothèque ou de porter un jugement. C'est notre idée générale de traiter les champs de chaque ViewModel individuellement. Des enquêtes récentes ont révélé que cela peut être réalisé en une seule fois.

Méthode d'implémentation dans MVC4.6

1, implémentez l'interface IModelBinder et créez un ModelBinder personnalisé.

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. Ajoutez ModelBinder à la bibliothèque de liaison 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. Confirmez l'effet

Coupez les espaces après le mot de passe. lié à ViewModel, il devient 1 :

Méthode d'implémentation Asp.net core 1.1 MVC

1, personnalisez ModelBinder et

Héritez 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, ajoutez un fournisseur personnalisé pour ModelBinder


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, ajoutez un fournisseur au bibliothèque de gestion des liaisons


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

Placez le mot de passe après Les espaces sont coupés et devient 1 lorsqu'il est lié à ViewModel :


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn