2014-01-23 7 views
0

Я хочу выполнить Trim() метод на каждом TexBox управление на моей странице, перед значением возвращается. Я не хочу жестко кодировать один и тот же код для каждого элемента управления TexBox, я хочу сделать это более элегантным способом.Как создать пользовательский элемент управления TextBox?

Я нашел сделал следующий класс

namespace System.Web.UI.WebControls 
{ 
    public partial class TrimmedTextBuox : TextBox 
    { 
     private string text; 
     public override string Text 
     { 
      get { return string.IsNullOrEmpty(text) ? text : text.Trim(); } 
      set { text = value; } 
     }  
    } 
} 

, но это не удается, в то время как debuggind компилятор не проникает внутрь get{} и set{}.

После этого я создал UserControl элемент, но он должен быть deriverd от System.Web.UI.UserControl, не System.Web.UI.WebControls.TextBox, чтобы заставить его работать (есть исключение, которое указывает на то)

Итак, как я могу это сделать?

+0

Как вы называете свой 'TrimmedTextBuox'? Я боюсь, что вы не используете настраиваемый элемент управления, который вы создали! –

+0

Попробуйте эту 'public новую строку Text' вместо' public override string Text ' – alfoks

+0

IMO' set 'следует обрезать как text = value.Trim() not' get '. – anuragal

ответ

0

Это будет обрезать рекурсивно все текстовые поля перед вставкой.

public static void trimRecursive(Control root) 
    { 
     foreach (Control control in root.Controls) 
     { 
     if (control is TextBox) 
     { 
      var textbox = control as TextBox; 
      textbox.Text = textbox.Text.Trim(); 
     } 
     else 
     { 
      trimRecursive(control); 
     } 
    } 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    trimRecursive(Page); 
} 
3

Сначала вы должны зарегистрировать свой контроль на странице .aspx, как что:

<%@ Register TagPrefix="customControls" Namespace="WebApplication.Custom.Controls" Assembly="WebApplication"%> 

Затем вы можете вызвать его, используя разметку

<customControls:TrimmedTextBuox ID="txtTrim" runat="server"/> 

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

namespace WebApplication.Custom.Controls 
{ 
    public class TrimmedTextBuox : TextBox 
    { 
     public override string Text 
     { 
      get 
      {     
       return base.Text; 
      } 
      set 
      { 
       if (!String.IsNullOrEmpty(value)) 
        base.Text = value.Trim(); 
      } 
     } 
    } 
} 
0

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

public class TrimmedTextBox : TextBox 
{ 
    public new string Text 
    { 
     get 
     { 
      var t = (string) GetValue(TextProperty); 
      return t != null ? t.Trim() : string.Empty; 
     } 
    } 
} 

Для получения дополнительной информации о том, как новое ключевое слово со свойством работает refrer этого SO Question

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