Programming/.NET

서버 컨트롤에 특정 내용을 표시(렌더링)하는건 RenderContents 메소드를 재정의 함으로서 가능합니다.

 

protected override void RenderContents(HtmlTextWriter output)
{
    output.Write(Text);
}

 

RenderContents 메소드에는 HtmlTextWriter형의 매개변수값을 받는데 이 클래스는 컨트롤이 HTML을 생성하는데 사용됩니다.

 

protected override void RenderContents(HtmlTextWriter output)
{
    output.RenderBeginTag(HtmlTextWriterTag.B);
    output.Write(Text);
    output.RenderEndTag();
}

 

때문에 실제 HTML을 표시하기 위한 다양한 메소드가 존재함을 알 수 있습니다. 예제에서는 RenderBeginTag메소드를 통해 HtmlTextWriterTag의 B열거형값으로 B태그를 표시하고 마지막으로 RenderEndTag메소드로 B태그를 닫도록 하고 있습니다. RenderEndTag는 바로 직전에 사용한 태그에 대한 닫기태그를 자동으로 생성합니다. 대부분의 HTML요소는 이러한 작업과정을 통해 출력할 수 있으며 일일이 태그를 직접 작성하지 않아도 됩니다.

 

RenderBeginTag메소드는 보통 HTML 4.0구문을 사용하도록 되어 있지만 만약 클라이언트 브라우저가 4.0이하 하위버전만을 사용할 수 있는 브라우저라면 3.2버전에 맞는 구문을 자동으로 내보내는 기능을 가지고 있습니다.

 

output.RenderBeginTag(HtmlTextWriterTag.Div);
output.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
output.Write(Text);
output.RenderEndTag();

 

HTML요소에 속성을 추가하려면 AddAttribute메소드를 사용해 HtmlTextWriterAttribute열거형으로 어떤 속성을 추가할지 지정하고 그 값을 AddAttribute의 두번째 매개변수로 전달합니다.

 

예제에서는 ID속성에 '_div'값을 주었는데 직접 값을 입력하는대신 UniqueID와 ClientID를 사용할 수 있습니다. 단순하게 ID는 직접 값을 지정해 ID를 정하지만 UniqueID는 이 속성이 호출될때 마다 '상위컨테이너컨트롤ID:Ctl번호'형식의 고유 ID를 생성합니다.

 

ClientID는 페이지나 컨트롤의 ClientIDMode 속성에 따라 동작방식이 달라지는데 AutoID라면 UniqueID와 동일하며 Static이면 상위컨테이너컨트롤ID값을 사용하지 않도록 합니다. Predictable은 Static와 반대인데 상위컨테이너컨트롤ID값을 사용하지만 'Ctl번호'형식은 사용하지 않습니다. 다만 상위컨테이너컨트롤에 ClientIDRowSuffix속성으로 고유한 값을 가져갈 수 있도록 지정할 수 있습니다. 마지막으로 Inherit은 상위컨테이너컨트롤ID와 동일하게 ID를 유지하도록 합니다.

 

단순한 HTMl요소를 렌더링하는 것이외에 스타일에 대한 렌더링도 제어가 가능합니다. 만약 컨트롤에 다음과 같이 스타일이 지정된 경우

 

<cc1:WebCustomControl1 runat="server" Text="aaa" BackColor="Red"></cc1:WebCustomControl1>

 

BackColor="Red"라는 스타일을 RednerContents메소드에서 생성되는 특정 HTML요소에 적용하고자 하는 경우 해당 요소를 렌더링하기전 AddAtrributesToRender메소드를 호출하면 됩니다.

 

this.AddAttributesToRender(output);
output.RenderBeginTag(HtmlTextWriterTag.Div);
output.AddAttribute(HtmlTextWriterAttribute.Id, UniqueID);
output.Write(Text);
output.RenderEndTag();

 

예제는 Div 요소를 렌더링하기전 AddAttributesToRender 메소드를 호출하였는데 이렇게 되면 background-color: red; 라는 스타일은 Div와 그 하위 span에 모두 적용될 것입니다. 참고로 코드를 통해 스타일자체를 추가하려면 AddStyleAtribute메소드를 사용해야 합니다.

 

output.AddStyleAttribute(HtmlTextWriterStyle.Color, "Yellow");
this.AddAttributesToRender(output);

 

AddStyleAttribute메소드를 통해 'Yellow'색상의 스타일을 컨트롤에 추가하고 다시 AddAttributesToRender메소드를 기존의 스타일과 AddStyleAttribte메소드를 통해 추가한 스타일을 적용하도록 합니다.

'Programming > .NET' 카테고리의 다른 글

[C#] Stream  (0) 2016.08.24
[ASP.NET] 개인화(Personalization)  (0) 2016.08.16
[ASP.NET] 서버 컨트롤 - 2 (렌더링)  (0) 2016.08.09
[ASP.NET] 서버 컨트롤 - 1 (기본생성)  (0) 2016.08.01
[ASP.NET] ListView  (0) 2016.07.27
[ASP.NET] 사용자 정의 컨트롤  (0) 2016.07.21
0 0