2013-07-19 4 views
0

Когда пользователь заполнит мою форму для создания нового лица, я бы хотел, чтобы там не было пробелов до или после имени (тип String).Удаление пробелов из представления формы

Good: "John Doe"

Bad: "Джон Доу" или "John Doe"

Глядя на эту SO post, кажется, что я хочу использовать пользовательские ModelBinder. Однако, поскольку я, возможно, неправильно понимаю сообщение, замена моего DefaultModelBinder будет означать, что всем строкам не будет позволено иметь ведущие или конечные пробелы.

Как я могу гарантировать, что этот пользовательский ModelBinder влияет только на Name?

+0

string.trim() ?? – ssilas777

+0

Точка, связанная с этим вопросом SO, заключалась в том, чтобы явно не использовать Trim() каждую строку, поэтому я предполагаю, что и здесь. Интересно, однако, если использовать такой сложный способ только для одного поля. –

+0

Решение с привязкой к модели звучит как излишество для меня. –

ответ

2

Вы могли бы написать такое поведение прямо в ваш взгляд-модели (если вы используете вид-модели):

private string name; 

public string Name 
{ 
    get { return this.name; } 

    set { this.name = value.Trim(); } 
} 

Тогда Name прибудет предварительно обрезается в вашем методе действия контроллера.

+0

Я не уверен, что вы подразумеваете под названием Boe (опечатка?), однако может быть лучше добавить похожий бит кода в ваш домен/объект приложения вместо (или так же). Я бы не добавлял такую ​​логику, как это, в ваши запросы к БД или хранимые процедуры. –

0

Вы можете использовать функцию Trim. От MSDN,

Метод Trim удаляет из текущей строки все символы верхнего и заднего пробелов.

+0

Да, спасибо. Я все еще выясняю нужное место, чтобы положить 'Trim()' –

+0

@Kevin. Не ваша форма (диалог?) Имеет кнопку «Ok» для пользователя, чтобы отправить то, что они заполняют? Я думаю, вам просто нужно опубликовать -процесс их имени, когда они на самом деле нажимают «ok» или любую кнопку, которая закрывает вашу форму. – young

0

Вы можете иметь имя упоминалось в собственности напр:

public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get; set; } 

И тогда вы можете использовать модифицированный код ниже для решения пользовательской модели связующего в посте вы упомянули:

public class TrimModelBinder : DefaultModelBinder 
{ 
    protected override void SetProperty(ControllerContext controllerContext, 
             ModelBindingContext bindingContext, 
             System.ComponentModel.PropertyDescriptor propertyDescriptor, object value) 
    { 
     if (propertyDescriptor.Name.ToUpper().Contains("NAME") 
      && (propertyDescriptor.PropertyType == typeof(string))) 
     { 
      var stringValue = (string) value; 
      if (!string.IsNullOrEmpty(stringValue)) 
       stringValue = stringValue.Trim(); 

      value = stringValue; 
     } 

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

Таким образом, любое имя свойства, имя которого в нем и является типом строки, будет иметь белые пространства, отделенные, как вы хотите здесь.

Смежные вопросы