2009-06-25 3 views
1

설치 : TextBox 컨트롤이 많은 웹 폼.ASP.NET - Enabled = False 일 때 레이블 용 스왑 텍스트 상자

TextBox 컨트롤의 Enabled 속성을 False로 설정하면 런타임에 레이블에 대해 TextBox를 "바꿔 넣기"하고 싶습니다. 어쨌든 읽기 전용 인 경우 아이디어는 편집을 위해 설계된 컨트롤에 표시하지 마십시오.

나는 이것이 매우 단순하고 재사용 가능해야한다고 생각하지만, 이것을하는 가장 좋은 방법은 무엇입니까?

답변

3

확실하지 그 가장 좋은 방법은, 내가,

다음이 읽기 전용인지 확인, 렌더링 메소드를 오버라이드 (override), 사용자 지정 서버 컨트롤에서 텍스트 상자입니다

을 만들 것 레이블 컨트롤과 같은 span 태그는 않습니다. 다음 기본 (텍스트 상자) 인수 렌더링을하지 경우

...

public class SpecialTextbox : TextBox 
{ 
    public override void RenderControl(HtmlTextWriter writer) 
    { 
     if (!this.ReadOnly) 
     { 
      base.RenderControl(writer); 
     } 
     else 
     { 
      writer.Write(string.Format("<span id=\"{0}\" class=\"{1}\">{2}</span>", 
          this.ClientID, 
          this.CssClass, 
          this.Text)); 
     } 
    } 
} 
+0

... 그들은 방법으로 당신이 생각하는 좋아 – BigBlondeViking

2

하나의 가능한 솔루션은 TextBox를 확장하는 새로운 컨트롤을 만드는 것입니다. 그런 다음 특수 컨트롤이 렌더링 코드의 일부를 재정 의하여 ReadOnly = true 일 때 컨트롤이 Label과 비슷하게 렌더링됩니다. 그것은 당신의 렌더링에만 다음 읽을 경우

+0

난 당신이뿐만 아니라 원하는 경우 '라벨'에 대한에 대한 '범위'를 교환 할 수 – BigBlondeViking

2

또 다른 방법은 컨트롤 어댑터를 사용하여 조사하는 것입니다. BigBlondeViking이 권장하는 똑같은 일을 본질적으로 수행 할 수 있지만, 코드에서 일반적인 asp : textbox 컨트롤을 사용하도록 조롱 할 수 있습니다. 그것은 당신과 다른 개발자들에게 훨씬 더 쉬울 것입니다.

About control adapters

관련 문제