Обрезать все поля ввода, кроме полей с атрибутом NoTrim

Я работаю над приложением ASP.NET MVC 2, которое я не создавал. Все поля ввода в приложении обрезаются при привязке модели. Однако я хочу иметь атрибут NoTrim, который предотвращает обрезку определенных полей.

Например, у меня есть следующее поле состояния -:

<select name="State">
    <option value="">Select one...</option>
    <option value="  ">International</option>
    <option value="AA">Armed Forces Central/SA</option>
    <option value="AE">Armed Forces Europe</option>
    <option value="AK">Alaska</option>
    <option value="AL">Alabama</option>
   ...

Проблема в том, что когда пользователь выбирает «Международный», я получаю ошибку проверки, потому что два пробела обрезаны, а поле «Статус» является обязательным.

Вот что я хотел бы уметь делать:

    [Required( ErrorMessage = "State is required" )]
    [NoTrim]
    public string State { get; set; }

Вот что у меня есть для этого атрибута:

[AttributeUsage( AttributeTargets.Property, AllowMultiple = false )]
public sealed class NoTrimAttribute : Attribute
{
}

Существует пользовательская привязка модели, которая настраивается в приложении _Пуск :

protected void Application_Start()
{
    ModelBinders.Binders.DefaultBinder = new MyModelBinder();
   ...

. Вот часть переплета модели, которая выполняет обрезку:

protected override void SetProperty( ControllerContext controllerContext,
                                     ModelBindingContext bindingContext,
                                     PropertyDescriptor propertyDescriptor,
                                     object value )
{
    if (propertyDescriptor.PropertyType == typeof( String ) && !propertyDescriptor.Attributes.OfType<NoTrimAttribute>().Any() )
    {
        var stringValue = (string)value;

        if (!string.IsNullOrEmpty( stringValue ))
        {
            value = stringValue.Trim();
        }
    }

    base.SetProperty( controllerContext, bindingContext, propertyDescriptor, value );
}
7
задан David Kennedy 23 July 2012 в 23:01
поделиться