티스토리 뷰

ASP.NET에서 지원하는 서버 컨트롤을 이용하여 웹페이지를 만들때 부득이하게 서버컨트롤의 Text 속성부분에, 서버 변수를 사용해야 할 때가 있다.

다음과 같이, 다른 HTML 태그에 사용하듯이 서버 변수를 사용하게 되면, 정상적으로 동작하지 않을 것이다.

<asp:Button ID="btn_search" runat="server" OnClientClick="openPopupmember();" Text="<%=strSearch%>" CssClass="Btn_submit" />

서버 컨트롤은 서버에서 랜더링 되어, html 태그로 변경되기 때문에, 서버 측면에서 <%로 묶인 서버변수를 실행시킨다는 것은 상식적으로도 말이 되지 않는다.

잠시 ASP.NET에서 <% 블록과 비슷한 것들을 보자면, <%$, <%#이 있다.

먼저 <%$ 식의 전체 표현은 <%$ 식: 값%>이다. $기호는 바로 다음에 식이 표시됨을 알려준다. 식은 AppSettings, ConnectionStrings, Resource등가 같은 형식을 정의한다. 값은 ASP.NET에서 표시될 값이다. 예를 들어 데이터베이스 연결문자열을 가져올 경우 다음과 같이 표현하면 된다.

Web.Config
============
<configuration>
  <connectionStrings>
    <add name="NorthwindConnectionString1"
      connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
    <!-- additional settings -->
</configuration>

Control
============
<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
    SelectCommand="SELECT * FROM [Employees]"
    ConnectionString="<%$ ConnectionStrings:NrthwindConnectionString1 %>">
</asp:SqlDataSource>

<%# 식은 데이터바인딩 식이다. 데이터바인딩 식은 페이지에서 DataBind 메서드가 호출되는 경우 서버 컨트롤 속성과 데이터 소스를 바인딩한다. DataBind 메소드는 모든 컨트롤들이 가지고 있는 메소드이다.
<%#의 전체 데이터바인딩 식은 <%# 식%>이다.

따라서 서버컨트롤에 서버변수를 사용하려고 한다면 이 데이터바인딩 식을 사용하면 된다.
예를 들면, 다음과 같이 .aspx.cs 코드에 서버변수를 정의했다고 한다면

cs 코드
============
protected String strSearch = String.Empty;
strSearch = strUser + " 검색";

다음과 같이 사용할 수 있다.

cs 코드
============
protected void Page_Load(object sender, EventArgs e)
{
  ....
  btn_search.DataBind();
}

aspx 코드
=============
<asp:Button ID="btn_search" runat="server" OnClientClick="openPopupmember();" Text="<%# strSearch%>" CssClass="Btn_submit" />

단 데이터바인딩은 식만을 표현하는 것이기 때문에, 함수형태는 사용할 수 없다.
여러군데에서 사용한다면, 다음과 같은 함수를 만들어 사용해도 될 것 같다.

  public void bindControl(Control pCtl, String sId)
  {
    if (pCtl != null)
    {
      if (pCtl.ID == sId)
        pCtl.DataBind();
      else // ListView와 같이 자식 컨트롤일 경우...
      {
        Control ctl = pCtl.FindControl(sId);
        if(ctl != null)
          ctl.DataBind();
       }
     }
   }

bindControl(btn_search, "btn_search");



출처 : 無忌's Craft

'프로그래밍 > ASP.NET' 카테고리의 다른 글

웹 사이트 파일 형식  (0) 2010.01.27
파일 수신 제한  (0) 2010.01.27
connection pool  (0) 2010.01.07
연결 풀링 이해  (0) 2010.01.07
트랜잭션 수행  (0) 2010.01.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday