数据输入后修剪字符串的最佳方法。我应该创建一个自定义模型绑定器吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

我正在使用ASP.NET MVC,并且希望所有用户输入的字符串字段在插入到数据库之前都被剪裁。由于我有很多数据输入表单,我正在寻找一种优雅的方式来修剪所有字符串,而不是显式修剪每个用户提供的字符串值。我很想知道人们如何以及何时修剪字符串。

我想过也许创建一个自定义模型绑定器并修剪任何字符串值......那样,我所有的修剪逻辑都包含在一个地方。这是一个好方法吗?是否有任何代码示例可以执行此操作?

提问于
用户回答回答于
  public class TrimModelBinder : DefaultModelBinder
  {
    protected override void SetProperty(ControllerContext controllerContext, 
      ModelBindingContext bindingContext, 
      System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
    {
      if (propertyDescriptor.PropertyType == typeof(string))
      {
        var stringValue = (string)value;
        if (!string.IsNullOrWhiteSpace(stringValue))
        {
          value = stringValue.Trim();
        }
        else
        {
          value = null;
        }
      }

      base.SetProperty(controllerContext, bindingContext, 
                          propertyDescriptor, value);
    }
  }

这个密码怎么样?

ModelBinders.Binders.DefaultBinder = new TrimModelBinder();

设置global.asax应用程序_启动事件。

用户回答回答于

作为IModelBinder而不是DefaultModelBinder,因此在global.asax中添加模型绑定器是通过

ModelBinders.Binders.Add(typeof(string),new TrimModelBinder());
public class TrimModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext,
    ModelBindingContext bindingContext)
    {
        ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (valueResult== null || valueResult.AttemptedValue==null)
           return null;
        else if (valueResult.AttemptedValue == string.Empty)
           return string.Empty;
        return valueResult.AttemptedValue.Trim();
    }
}

扫码关注云+社区

领取腾讯云代金券