'PreviousPageType'에 해당되는 글 2건

Programming/.NET
ASP.NET에서 서로 다른 두 페이지간 포스팅이 이루어 져야 하는 경우를 살펴보고자 합니다. 아래 예제는 WebForm1.aspx에서 WebForm2.aspx로 포스트가 전송되어야함을 가정한 경우입니다.

먼저 WebFrom1의 aspx 페이지 내용을 다음과 같이 입력합니다.
<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/WebForm2.aspx" />
    </div>
</form>
<코드 1-1>

Button1의 PostBackUrl 속성에 주목하시기 바랍니다. 이 속성에 의해 Button1을 클릭하는 경우 WebForm1의 내용을 WebForm2로 전송하게 됩니다.

그럼 WebForm1의 내용을 전달받게될 WebForm2에서는 다음과 같이 처리되어야 합니다.
protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("WebForm1의 TextBox1 내용 : " + (PreviousPage.FindControl("TextBox1") as TextBox).Text);
}
<코드 1-2>포스트로 전송되어온 WebForm1의 데이터를 받기 위하여 WebForm2에서는 PreviousPage 속성의 FindControl 메서드로 WebForm1의 TextBox 컨트롤을 찾아내서 해당 컨트롤의 값을 가져옵니다.

만약 FindControl 메서드를 통하여 일일이 컨트롤을 찾기가 번거롭다면 다음 방법을 사용할 수도 있습니다.

우선 WebForm1 클래스에서 TextBox에 접근할 수 있는 속성을 설정합니다.
public TextBox webform1_tetbox
{
    get {
        return TextBox1;
    }
}
<코드 1-3>

그런다음 WebForm2에서 PreviousPageType 지시자를 사용해 다음과 같이 WebForm1.aspx 에 대한 VirtualPath 속성을 설정하고
<%@ PreviousPageType VirtualPath="~/WebForm1.aspx" %>
<코드 2-1>

WebForm2의 cs단에서 FindControl 메서드를 사용하는 대신 PreviousPage속성에 <코드 1-3>에서 정의한 속성을 지정하면 됩니다.
Response.Write("WebForm1의 TextBox1 내용 : " + (PreviousPage.webform1_tetbox as TextBox).Text);
<코드 1-4>
사실 이 방법이 여러모로 편리한데 이를 테면 컨트롤이 아닌 특정 변수를 통해 포스트로 데이터를 전송하고자 하는 경우
protected void Page_Load(object sender, EventArgs e)
{
    PostData = "hi!";
}

public string PostData
{
    get;
    set;
}
<코드 1-5>
코드 1-5처럼 특정 변수에 대한 속성을 정의하여 포스트전송할 페이지(WebForm1)에서 해당 값을 설정하고
Response.Write("WebForm1의 TextBox1 내용 : " + PreviousPage.PostData);
<코드 1-6>

WebForm2에서는 위와 같이 PreviousPage에 해당 속성을 정의하기만 하면 값을 가져올 수 있게 됩니다.

그런데 여기서 만약 WebForm2가 단지 포스트전송되어오는 데이터만을 대상으로 하는 페이지라면 누군가 WebForm2로 바로 접근하는 경우에 문제가 발생할 수 있습니다. 따라서 WebForm2의 입장에서 자신에게 직접들어오는 것인지 아니면 포스트전송으로 들어오는 것인지를 판단해야할 필요가 있는것입니다.

그래서 WebForm2에서는 코드1-7과 같이 PreviousPage의 존재여부와 IsCrossPageBack 속성을 통해 포스트로 들어오는지의 상황을 체크해야 합니다.
protected void Page_Load(object sender, EventArgs e)
{
    if (PreviousPage != null && PreviousPage.IsCrossPagePostBack)
        Response.Write("WebForm1의 TextBox1 내용 : " + PreviousPage.PostData);
    else
        Response.Write("올바르지 않은 접근입니다.");
}
<코드 1-7>

버튼에 PostBackUrl 을 지정하여 다른 페이지로 데이터를 POST 하는 경우 한가지 주의해야할 사항이 있는데 PostBackUrl 과 OnClientClick 속성을 같이 사용하는 경우 OnClientClick 에 return 을 걸어서는 안됩니다. PostBackUrl 을 지정하면 내부적으로 데이터 POST를 위한 스크립트를 생성하게 되는데 return 을 걸게되면 생성된 스크립트부분이 통과되지 못하기 때문입니다.

따라서 다음과 같이 OnClientClick 에 return 을 제외하고 스크립트함수 파라메터부분에 event 를 추가한 다음
OnClientClick="javascript:agree_check(event);"
해당 함수 내부에서 페이지의 POST를 중단해야 하는 시점에 event.preventDefault(); 를 추가하도록 합니다.
if (!$('#agree1').is(':checked')) {
 alert('회원 가입을 위해서는 개인정보 제공동의가 필요합니다.');
 $('#agree1').focus();
 event.preventDefault();
 return false;
}
0 0
Programming/.NET
ASP.NET 지시문은 기본적으로 컴파일러가 페이지를 컴파일시 사용하는 것으로 페이지 처리를 제어하는데 사용합니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
위는 Page 지시문의 예로서 보시는 바와 같이 <%@로 시작해 %>로 끝나며 해당 지시문이 페이지안에 어디에 있건 상관이 없으나 통상 페이지의 상단에 위치합니다.

아래 표 1-1은 사용가능한 지시문의 목록과 용도를 나열한 것입니다.

 Assembly  어셈블리를 페이지나 사용자 정의 컨트롤과 연결 접근할 수 있도록 합니다.
 Control  사용자 정의 컨트롤에서 사용
 Implements  닷넷 프레임워크 인터페이스 구현
 Import  페이지나 컨트롤에 네임스페이스 참조추가
 Master  마스터 페이지에서 사용
 MasterType  마스터 페이지에서 사용 - 페이지 파싱및 컴파일시
 OutputCache  페이지나 컨트롤의 캐시정책 제어
 Page  페이지 파싱및 컴파일시 특정 속성 지정
 PreviousPageType  다른 페이지와의 포스트백 수행시 사용하며 포스팅되어 오는 페이지를 지정합니다.
 Reference  페이지나 컨트롤을 현재 페이지나 컨트롤에서 사용할 수 있도록 연결
 Register  사용자 지정컨트롤 연결및 접두사 지정하는 것으로 사용자 정의 컨트롤 등록시 지정된 별칭을 통해 해당 컨트롤에 접근할 수 있도록 합니다.
<표 1-1>

예를 들어 OutputCache 의 경우 다음과 같이 지시문을 작성할 수 있으며
<%@ OutputCache Duration="10" VaryByParam="None" %>
이 지시문은 10초동안 서버의 메모리에 페이지를 캐시하도록 합니다. 해당 지시문을 사용하는 페이지가 마스터페이지를 사용하는 경우라면 마스터페이지까지도 캐시정책에 포함되는데 참고로 마스터는 OutputCache 를 지정할 수 없습니다.

1. Page 주요 속성

(1) AspCompat

페이지를 STA(Sing-Threaded Apartment)로 실행할지를 지정합니다.

(2) Async

페이지의 동기/비동기 처리여부를 지정합니다.

(3) AsyncTimeout

Async가 비동기로 설정된 경우 처리완료대기 시간을 설정합니다. 기본값은 45초입니다.

(4) AutoEventWireup

다중속성이 아닌 단독속성으로 설정해야 하며 이 값을 false로 지정하는 경우 페이지내에서 이벤트를 정의하면 인라인형태로 이벤트가 연결됩니다.

(5) Buffer

HTTP응답 버퍼링을 설정합니다.

(6) ClientIDMode

페이지내에서 사용된 서버컨트롤의 ID지정 모드를 설정합니다. 기본값은 AutoID입니다.

(7) CompilationMode

페이지의 컴파일처리를 설정합니다. 기본값은 Auto입니다.(컴파일이 필요한 경우가 아니면 컴파일 하지 않습니다.)

(8) Description

페이지에 설명을 추가합니다. 컴파일설정과는 관련이 없으며 개발자 임의의 메모부분입니다.

(9) EnableEventValidation

포스트백및 콜백시 이벤트의 유효성을 검사할지 여부를 설정합니다.

(10) EnableSessionState

페이지에서 세션상태기능을 사용할지 지정합니다. 기본값은 true입니다.

(11) EnableTheming

페이지의 테마기능을 사용할지 지정합니다. 기본값은 false입니다.

(12) EnableViewState

페이지간의 뷰상태를 유지할지 지정합니다. 기본값은 true입니다.

(13) EnableViewStateMac

페이지간에 포스트백 발생시 뷰 상태에 대해 MAC(Machine Authentication Check)를 확인해야 하는지를 지정합니다. 기본값은 false입니다.

(14) ErrorPage

해당 페이지에서 오류발생시 표시할 페이지를 지정합니다.

(15) MaintainScrollPosttionOnPostback

페이지에서 포스트백이 발생된 이 후 페이지를 이전 스크롤상태에 위치시킬지 지정합니다.

(16) MetaDescription

검색엔진 최적화용으로 페이지의 설명을 설정합니다.

(17) MetaKeywords

검색엔진 최적화용으로 페이지의 키워드를 설정합니다.

(18) StylesheetTheme

페이지의 테마기능 사용시 해당 테마의 디자인이 정의된 Stylesheet 파일을 지정합니다. StylesheetTheme속성은 페이지의 서버컨트롤에 이미 정의된 스타일이 존재하는 경우에는 적용되지 않습니다.

(19) Theme

페이지의 테마기능 사용시 해당 테마의 디자인이 정의된 테마파일을 지정합니다. Theme속성은 페이지의 서버컨트롤에 이미 정의된 스타일이 존재하는 경우 기존 스타일을 무시하고 새롭게 스타일을 정의하도록 합니다.

(20) Title

페이지의 제목을 지정합니다. html에서 <title></title>과 같습니다.

(21) Trace

페이지 디버깅및 성능을 위한 페이지 추적기능을 사용할 수 있도록 설정합니다. 이 속성을 true로 하고 페이지를 실행하면 다음과 같은 추적결과가 표시됩니다.

 


(22) TraceMode

Trace를 사용할 경우 어떤 형태로 항목을 표시할지 설정합니다.

(23) Transaction

페이지에 트랜잭션 사용여부를 설정합니다.

(24) ValidateRequest

페이지안에 폼입력 데이터의 위험성 여부를 검증할지 지정합니다. 이 기능을 켜면 javascript등의 잠재적 위험이 있는 입력값이 존재하는 경우 요청을 처리하지 않도록 합니다.

(25) ViewStateEncryptionMode

페이지에서 뷰상태 암호화 방법을 지정합니다.

(26) WarningLevel

페이지 컴파일시 경고표시 수준을 지정합니다.

2. Master 주요 속성

(1) CompilerOptions

마스터 페이지 컴파일시 특정 옵션내용을 지정합니다.

(2) Inherits

마스터 페이지의 코드숨김 파일을 지정합니다.

(3) MasterPageFile

마스터 페이지에서 또 다른 마스터페이지를 사용하는 경우 해당 마스터페이지를 지정합니다.

3. Import 주요 속성

(1) Namespace

네임스페이스 참조를 지정합니다. Import 지시자는 Namespace 속성을 하나만 가질 수 있으며 여러 네임스페이스를 지정해야 하는 경우 Import 지시문을 다음과 같이 필요한 만큼 작성해야 합니다.
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web" %>
C:\Windows\Microsoft.NET\Framework\v4~~~\Config 에 위치해 있는 web.config에는 이미 기본적으로 여러개의 네임스페이가 정의되어 있으며 필요하면 추가하거나 삭제할 수 있습니다. 물론 프로젝트의 Web.config에도 다음과 같이 system.web안에 설정이 가능합니다.
<pages>
    <namespaces>
        <add namespace="System.Data"/>
     </namespaces> 
</pages>
4. Register 주요 속성
<%@ Register TagPrefix="clt" Namespace="clt.myClass" Assembly="cltLib" %>
(1) TagPrefix

별칭을 지정합니다.

(2) Assembly

TagPrefix와 연결되는 컨트롤의 어셈블리를 지정합니다.

(3) Namespace

TagPrefix와 연결된 컨트롤의 네임스페이스를 지정합니다.

(4) Src

컨트롤의 위치지정를 지정합니다.

(5) TagName

컨트롤의 클래스와 연결되는 별칭을 지정합니다.

5. Assembly

(1) Name

어셈블리 이름입니다. 이때 어셈블리 이름이 aaa.dll 인 경우 .dll의 확장명은 지정하지 않습니다.

(2) Src

어셈블리 파일 위치를 지정합니다.

6. PreviousPageType

(1) TypeName

포스트백이 일어나는 클래스 이름입니다.

(2) VirtualPath

포스트백을 전달받을 페이지 위치를 지정합니다.

7. MasterType

(1) TypeName

연결될 마스터페이지의 클래스 이름을 지정합니다.

(2) VirtualPath

연결할 해당 마스터페이지의 위치를 지정합니다.

10. OutputCache

(1) CacheProfile

web.config 에서 캐시관련 정책을 설정하고 해당 프로필의 이름을 이 속성에 설정하면 web.config에서 프로젝트 웹사이트 전체캐시관련 설정을 제어할 수 있게 됩니다.

(2) Duration

캐시 지속시간을 초단위로 설정합니다.

(3) NoStore

페이지에 no-store 헤더 전송 여부를 설정합니다.

(4) SqlDependency

SQL 서버 캐시 무효화 기능 사용여부를 설정합니다.

8. Reference

(1) VirtualPath

컴파일 대상인 페이지나 컨트롤의 위치를 설정합니다.

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

[ASP.NET] 폴더 구조  (1) 2013.12.12
[ASP.NET] Label  (0) 2013.12.11
[ASP.NET] 빌드공급자  (0) 2013.12.10
[ASP.NET] 페이지 구조  (0) 2013.12.09
[ASP.NET] 지시문  (0) 2013.12.07
[ASP.NET] 포스트백(PostBack)  (0) 2013.12.05
0 0
1
블로그 이미지

클리엘