Лучший способ обрезать строки после ввода данных. Я должен создать пользовательский образцовый редактор связей?

DOMException содержит детали, которые не всегда видны . Поймай свое DOMException и обязательно запиши сообщение в консоль. Как правило, это будет гораздо более информативным. В моем случае сообщение «Ошибка регистрации - разрешение отклонено» напомнило мне, что я заблокировал все уведомления в настройках Chrome.

169
задан Yuck 13 February 2018 в 17:51
поделиться

2 ответа

  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 Application_Start.

210
ответ дан 23 November 2019 в 20:49
поделиться

Я отправил это в другом потоке. В ядре asp.net 2, я вошел в другое направление. Я использовал фильтр действия вместо этого. В этом случае разработчик может или установить его глобально или использовать в качестве атрибута для действий, он хочет применить строковую обрезку. Этот код бежит за образцовой привязкой, произошел, и это может обновить значения в объекте модели.

Вот мой код, сначала создайте фильтр действия:

public class TrimInputStringsAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        foreach (var arg in context.ActionArguments)
        {
            if (arg.Value is string)
            {
                string val = arg.Value as string;
                if (!string.IsNullOrEmpty(val))
                {
                    context.ActionArguments[arg.Key] = val.Trim();
                }

                continue;
            }

            Type argType = arg.Value.GetType();
            if (!argType.IsClass)
            {
                continue;
            }

            TrimAllStringsInObject(arg.Value, argType);
        }
    }

    private void TrimAllStringsInObject(object arg, Type argType)
    {
        var stringProperties = argType.GetProperties()
                                      .Where(p => p.PropertyType == typeof(string));

        foreach (var stringProperty in stringProperties)
        {
            string currentValue = stringProperty.GetValue(arg, null) as string;
            if (!string.IsNullOrEmpty(currentValue))
            {
                stringProperty.SetValue(arg, currentValue.Trim(), null);
            }
        }
    }
}

, Чтобы использовать его, или зарегистрируйтесь как глобальный фильтр или украсить Ваши действия атрибутом TrimInputStrings.

[TrimInputStrings]
public IActionResult Register(RegisterViewModel registerModel)
{
    // Some business logic...
    return Ok();
}
0
ответ дан 23 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: