Microsoft MVP성태의 닷넷 이야기
.NET Framework: 62. ASP.NET 웹 컨트롤 렌더링 가로채기 [링크 복사], [링크+제목 복사],
조회: 25513
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 


ASP.NET에서의 웹 컨트롤을 작성하다 보면, 특정 컨트롤의 출력을 알고 싶은 경우가 있습니다.

아는 것 뿐만 아니라, 해당 컨트롤의 출력이 웹 페이지로 출력되기 전에, 원하는 조작을 하고 싶을 때도 있습니다.

방법은 그다지 어렵지 않습니다. 아시겠지만, 웹 컨트롤은 일반적으로 Render 함수에서 그 출력을 정의하게 되는 데, 다음과 같은 Signature를 가지고 있습니다.

override protected void Render( System.Web.UI.HtmlTextWriter writer )
{
}

오호... 딱 보기만 해도 이미 답은 나왔습니다. ^^

우선, 출력을 가로채고 싶은 웹 컨트롤을 상속받습니다. 만약 TextBox 라면,

public class MyTextBox : TextBox
{
	override protected void Render( System.Web.UI.HtmlTextWriter writer )
	{
		StringWriter strWriter = new StringWriter();
		HtmlTextWriter htmlWriter = new HtmlTextWriter( strWriter );
		base.Render( htmlWriter );
		writer.Write( htmlWriter.InnerWriter.ToString() );
	}
}

위와 같이, 동일하게 HtmlTextWriter 를 인자로 전달하면 되는 것입니다. 그럼, base 클래스 - 즉 TextBox 클래스는 넘겨진 htmlWriter를 이용해서 해당 클래스의 내용을 출력해 줄 것이고, 이후 개발자의 입맛에 맞게 htmlWriter.InnerWriter.ToString() 값을 적절하게 조절한 다음에 원래의 writer.Write 메서드를 이용해서 출력해 주면 되는 것입니다.

기억해 두어야 할 것은... ASP.NET 웹 컨트롤은 아무리 날고 기어봐야 결국엔 HTML 문자열일 뿐이라는 사실.






[최초 등록일: ]
[최종 수정일: 4/14/2006]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11976정성태7/4/201923599오류 유형: 553. (잘못 인증 한 후) 원격 git repo 재인증 시 "remote: HTTP Basic: Access denied" 오류 발생
11975정성태7/4/201930520개발 환경 구성: 448. Visual Studio Code에서 콘솔 응용 프로그램 개발 시 "입력"받는 방법
11974정성태7/4/201927549Linux: 22. "Visual Studio Code + Remote Development"로 윈도우 환경에서 리눅스(CentOS 7) C/C++ 개발
11973정성태7/4/201925337Linux: 21. 리눅스에서 공유 라이브러리가 로드되지 않는다면?
11972정성태7/3/201931291.NET Framework: 847. JAVA와 .NET 간의 AES 암호화 연동 [1]파일 다운로드1
11971정성태7/3/201925186개발 환경 구성: 447. Visual Studio Code에서 OpenCvSharp 개발 환경 구성
11970정성태7/2/201925297오류 유형: 552. 웹 브라우저에서 파일 다운로드 후 "Running security scan"이 끝나지 않는 문제
11969정성태7/2/201925602Math: 63. C# - 3층 구조의 신경망파일 다운로드1
11968정성태7/1/201932137오류 유형: 551. Visual Studio Code에서 Remote-SSH 연결 시 "Opening Remote..." 단계에서 진행되지 않는 문제 [1]
11967정성태7/1/201927422개발 환경 구성: 446. Synology NAS를 Windows 10에서 iSCSI로 연결하는 방법
11966정성태6/30/201926098Math: 62. 활성화 함수에 따른 뉴런의 출력을 그리드 맵으로 시각화파일 다운로드1
11965정성태6/30/201926356.NET Framework: 846. C# - 2차원 배열을 1차원 배열로 나열하는 확장 메서드파일 다운로드1
11964정성태6/30/201926315Linux: 20. C# - Linux에서의 Named Pipe를 이용한 통신
11963정성태6/29/201926340Linux: 19. C# - .NET Core Unix Domain Socket 사용 예제
11962정성태6/27/201923579Math: 61. C# - 로지스틱 회귀를 이용한 선형분리 불가능 문제의 분류파일 다운로드1
11961정성태6/27/201923838Graphics: 37. C# - PLplot - 출력 모음(Family File Output)
11960정성태6/27/201926362Graphics: 36. C# - PLplot의 16색 이상을 표현하는 방법과 subpage를 이용한 그리드 맵 표현
11959정성태6/27/201926988Graphics: 35. matplotlib와 PLplot의 한글 처리
11958정성태6/25/201932125Linux: 18. C# - .NET Core Console로 리눅스 daemon 프로그램 만드는 방법 [6]
11957정성태6/24/201927316Windows: 160. WMI 쿼리를 명령행에서 간단하게 수행하는 wmic.exe [2]
11956정성태6/24/201928463Linux: 17. CentOS 7에서 .NET Core Web App 실행 환경 구성 [1]
11955정성태6/20/201925512Math: 60. C# - 로지스틱 회귀를 이용한 분류파일 다운로드1
11954정성태6/20/201923766오류 유형: 550. scp - sudo: no tty present and no askpass program specified
11953정성태6/20/201921289오류 유형: 549. The library 'libhostpolicy.so' required to execute the application was not found in '...'
11952정성태6/20/201922847Linux: 16. 우분투, Centos의 Netbios 호스트 이름 풀이 방법
11951정성태6/20/201926196오류 유형: 548. scp 연결 시 "Permission denied" 오류 및 "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" 경고
... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...