2014-01-23 5 views
0

값을 반환하기 전에 내 페이지의 각 TexBox 컨트롤에서 Trim() 메서드를 수행하려고합니다. 나는 각 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; } 
     }  
    } 
} 

으나 컴파일러가 내부 get{}set{}을하지 않는 debuggind 동안은 실패합니다.

는 그 후, 나는 UserControl 항목을 만들었지 만 내가 그렇게 할 수있는 방법, 그것은 그래서

(즉 가리키는 예외가있다)도 작동하지 System.Web.UI.WebControls.TextBox, System.Web.UI.UserControl에서 deriverd해야합니까?

+0

어떻게 당신이 당신의'TrimmedTextBuox'를 호출에 refrer 작동? 나는 당신이 만든 사용자 정의 컨트롤을 사용하지 않는 것이 두렵습니다! –

+0

'public override string Text' 대신'public new string Text'를 시도하십시오 – alfoks

+0

IMO 'set'은 'get'이 아닌 text = value.Trim()처럼 잘려야합니다. – 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 키워드를 사용하여 기본 클래스의 Text 속성을 숨기는 것입니다. 속성이 어떻게 새로운 키워드에 대한 자세한 정보에 대한 샘플 코드 ...

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

이 SO Question

관련 문제