'Programming/ASP.NET 4.0'에 해당되는 글 14건

  1. SessionState - CompressionEnabled
  2. FormView - RenderOuterTable
  3. GridView -PersistantRowSelection
  4. RepeatLayOut
  5. HttpUtility.HtmlEncode
  6. Server Controls EnableViewState
  7. 비쥬얼스튜디오 2010에서 프로파일 변경하기
  8. ASP.NET 4.0 미리 살펴보기
  9. Auto-Start Web Applications ( 자동시작 웹 어플리케이션)
  10. Routing WebForms OutBound

compressionEnabled 모드가 true되면 세션을 압축하여 전달 및 저장하게 된다.


FormView - RenderOuterTable

FormView가 렌더링 되어진 HTML을 보면 그림1 처럼 <table> 태그가 데이터를 감싸서 보여주게 된다.

RenderOuterTable 속성은 이 테이블을 사용할 것인지 않을 것인지를 제어할 수 있게 해준다. 속성값을 false로 주면 그림 3처럼 div태그로만 감싸지게 된다.

Figure 1.


Figure 2


Figure 3





그리드 뷰의 선택이 페이지가 바뀌었을때 유지된다. 그러나 PersistantRowSelection 속성을 True로 변경하면
페이지가 바뀔때 행선택에 해제된다.

RepeatLayOut



체크박스 리스트 또는 라디오 리스트의 RepeatLayOut 속성은 다음과 같이
Table, Flow, UnorderedList, OrderedList의 4가지가 있다.

그림 1은 Table, 그림 2는 UnorderedList, 그림 3은 OrderedList 그리고 그림 4는 Flow일때의 HTML이 렌더링된 모습니다.


Figure 1. Table

Figure 2. UnorderedList

Figure 3. OrderedList

Figure 4. Flow

HttpUtility.HtmlEncode


HttpUtility.HtmlEncode를 통하여 문자열을 html로 변환할 수 있다. 이를 통하여 악의적인 코드가 데이터베이스로 들어갔다가 다시 웹페이지가 이를 읽어서 랜더링할때 동작하는 것을 방지하는데 이용될 수 있다.
각 서버 컨트롤의 EnableViewState 속성을 이용하여 적절하게 상태 제어를 할 수 있다.

웹 개발(코드 최적화) 모드로 프로파일 변경하기-- > 코드 개발창만 기본으로 전체 영역에 걸쳐서 보여진다.

메뉴: tools --> Import and Export Settings --> Reset all settings > No, Just resettings, ... > Web Development(Code Optimized)


비쥬얼 스튜디오 2010과 asp.net 4.0에서는 웹 어플리케이션을 만드는데 있어서 두개의 가장 큰 프레임워크를 제공합니다. 첫번째는 ASP.NET MVC Framework이고 다른 하나는  ASP.NET Web Form Framework입니다.

그 밖에 여러가지 새로운 기능이 추가되었으나, 그중에서도 서버사이트 웹컨트롤들에 대한 내용을 다루어 보겠습니다.

1) CSS-Friendly HTML

<asp:Menu runat="server" ID="_menu">
    <Items>
        <asp:MenuItem Text="Home" NavigateUrl="~/Default.aspx" />
        <asp:MenuItem Text="Shop" NavigateUrl="~/Shop.aspx" />
    </Items>
</asp:Menu>

위의 서버 컨트롤은 다음과 같은 HTML로 변환됩니다.
<table class="..." cellpadding="0" cellspacing="0" border="0">
    <tr id="_menun0">
        <td>
            <table cellpadding="0" cellspacing="0"
                border="0" width="100%">
                <tr>
                    <td style="...">
                        <a class="..." href="Default.aspx">Home</a>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

그러나 ASP.NET 4.0 에서는 다음과 같이 변환됩니다.

<div id="_menu">
    <ul class="level1">
        <li><a class="level1" href="Default.aspx" target="">Home</a></li>
    </ul>
</div>

ASP.NET 4.0 의 서버 컨트롤들은 CSS과 유사한 속성을 제공합니다.

2) Generating Client IDs
기존의 ASP.NET에서는 ClientID가 다음과 같이 상위 컨트롤의 아이디와 합쳐진 구조로 생성되었다.
ctl00_content_ctl20_ctl00_loginlink

ASP.NET은 새로운 구조를 추가하였다. 예 2-1은 설정된 아이디 그대로 HTML로 변환된다. 즉, 'checklist'로 될 것이다. 그러나 2-2는 employeeList_IsSalaried_10 과 같이 EmployeeID가 로 각 체크박스 노드의 아이디의 마지막에 붙는다. 기본속성은 Inherit이다.  이 설정은 하위노느로 자동으로 상속되어진다. 마지막으로 AutoID가 있는데 이는 이전 버전과 동일한 구조로 클라이언트 아이디를 생성한다.

예2-1)
<asp:CheckBoxList runat="server" RepeatLayout="OrderedList"
                  ID="checklist" ClientIDMode="Static">
    <asp:ListItem>Candy</asp:ListItem>
    <asp:ListItem>Flowers</asp:ListItem>
</asp:CheckBoxList>

예2-2)
<asp:ListView runat="server" ID="employeeList"
                      ClientIDMode="Predictable"
                      ClientIDRowSuffix="EmployeeID">

            <ItemTemplate>
                <asp:CheckBox runat="server" ID="IsSalaried"
                              Checked=<%# Eval("IsSalaried") %> />
            </ItemTemplate>
        </asp:ListView>

3) New Project Template
web.config의 내용은 간결해졌으며, Scripts폴더가 새로 생겼으며 여기에는 JQuery가 들어가 있다. 또한 마스터 페이지 및 스타일 시트를 기본으로 제공하고 있다.


그 밖에 여러가지 중요 특성이 ASP.NET MVC 프레임워크에 추가 되었다.

아래의 글은 http://vsts2010.net/167 에서 부분 발췌하였습니다.

Auto-Start Web Applications ( 자동시작 웹 어플리케이션)

  어떤 웹 어플리케이션은 많은양의 데이타를 로드하고, 처음 요청을 처리하기 전에 값비싼 초기화 처리를 수행할 필요가 있습니다. ASP.NET의 초기버전에서 이러한 상황을 위하여, 당신은 ASP.NET 어플리케이션을 깨우기 위하여 커스텀 접근을 고안해야만 했습니다. 그런 다음에 Global.asax에서 Application_Load   매소드 동안 초기화 코드를 실행하였습니다.

  이 시나리오는 직접적으로 지정하는 auto-start 라는 새로운 확장성있는 특징이 가능합니다. 단 ASP.NET이  Windows Server 2008 R2, IIS7.5 환경에서 작동할 때입니다. 그 auto-start 특징은 어플리케이션 풀을 시작하고, ASP.NET 어플리케이션을 초기화하고, HTTP 요청을 접수하는 동안 제어된 접근을 제공한다. auto-start 특징을 사용하기위하여, IIS 관리자는 applicationHost.config 파일에서 다음의 컨피그레이션을 사용하는것에 의하여 자동적으로 시작되기위하여 IIS7.5에서 어플리케이션 풀을 설정합니다.

<applicationPools>
  <add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationPools>

  왜냐하면 하나의 어플리케이션 풀은 다수의 어플리케이션을 포함 할 수 있기 때문에, 우리는 applicationHost.config 파일에서 다음의 컨피그레이션을 사용하는것에 의하여 자동적으로 시작되는 개별적인 어플리케이션을 구체화합니다.

<sites>
  <site name="MySite" id="1">
    <application path="/"
      serviceAutoStartEnabled="true"
      serviceAutoStartProvider="PrewarmMyCache" >
      <!-- Additional content -->
    </application>
  </site>
</sites>

<!-- Additional content -->

<serviceAutoStartProviders>
  <add name="PrewarmMyCache"
    type="MyNamespace.CustomInitialization, MyLibrary" />
</serviceAutoStartProviders>

  IIS 7.5 서버가 콜드 스타트 되었거나 개별 어플리케이션 풀이 리사이클링 되었을 때, IIS7.5는  웹어플리케이션이 자동적으로 시작되는 것을 결정하기 위하여 applicationHost에서 그 정보를 사용합니다. 자동 시작을 위하여 기록된 각 어플리케이션을 위하여, IIS7.5는 ASP.NET에 요청을 보냅니다. 그것은 어플리케이션을 임시적으로 HTTP요청을 받아들이지 않는 동안의 상태에서 어플리케이션을 시작하기 위해서입니다. 그것이 이상태에 있을 때, ASP.NET은 preloadProvider  특성에 의하여 정의된 타입을 예를들어 보여주고(이전의 예에서 보여주었을 때), 그것의 public 엔트리 포인트를 부릅니다.  당신이 관리된 자동시작형을 필수적인 엔트리 포인트와 함께 아래 예처럼 IProcessHostPreloadClient interface 를 실행하는것에 의하여 창조합니다. 

public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient
{
    public void Preload(string[] parameters)
    {
       // Perform initialization.
    }
}

  당신의 초기화 코드가 Preload  매소드에서 실행되고 메소드가 반환한 후에, ASP.NET  어플리케이션은 요청을 처리할 준비가 되어 있습니다. IIS5와 ASP.NET에서 자동시작 추가를 위해, 당신은 지금 처음 HTTP 요청을 처리하기  전에 값비싼 어플리케이션 초기화를 수행하는 것을 위해 잘 정의된 접근을 해야합니다. 예를 들어, 당신은 어플리케이션을 초기화하기 위한 새로운 자동시작 특징을 사용할 수 있고, 그런 다음에 어플리케이션이 초기화되고 HTTP 트래픽을 받을 준비하는 로드 밸런서에 신호를 보낼 수 있습니다.

Routing WebForms OutBound

목표: 텍스트 박스에 입력된 값으로 페이지 라우팅을 한다.


1. Global.asax 에서 라우팅 URL을 등록한다.


2. Default.aspx에서 텍스트박스와 버튼을 추가한다.

3. GetRouteUrl함수를 이용하여 텍스트 박스에서 받은 값으로 동적으로 라우팅 할 수 있다.

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim url As String = Page.GetRouteUrl("list-state", New With {.state = txtState.Text})
        Response.Redirect(url)
    End Sub