문제

설정 : 많은 텍스트 상자 컨트롤이있는 웹 양식.

텍스트 상자 컨트롤의 활성화 속성 중 하나를 False로 설정하면 런타임에 레이블을 위해 해당 텍스트 상자를 "스왑"하고 싶습니다. 여기서 아이디어는 어쨌든 읽는다면 편집을 위해 설계된 컨트롤에 표시하지 마십시오.

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

도움이 되었습니까?

해결책

가장 좋은 방법은 확실하지 않으며 사용자 정의 서버 제어를 만들 것입니다. 텍스트 상자입니다.

그런 다음 렌더 메소드를 무시하고 Readonly인지 확인하십시오.

읽기 만 읽으면 레이블 컨트롤처럼 스팬 태그를 렌더링하십시오.

그렇지 않으면베이스 (텍스트 박스) 렌더링을 인수하게하십시오 ...

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));
        }
    }
}

다른 팁

가능한 솔루션 중 하나는 텍스트 상자를 확장하는 새로운 컨트롤을 만드는 것입니다. 그런 다음 전문화 된 컨트롤이 렌더링 코드를 무시하고 (일부) 컨트롤이 readOnly = true 일 때 컨트롤이 레이블과 유사하게 렌더링됩니다.

또 다른 방법은 컨트롤 어댑터를 사용하는 것입니다. 본질적으로 BigBlondeviking이 추천하는 것과 똑같은 일을 할 수 있지만 코드에서 일반 ASP : TextBox 컨트롤을 사용할 수 있습니다. 그것은 당신과 다른 개발자들에게 훨씬 쉬울 것입니다.

제어 어댑터에 대해

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top