C\#페이지 간 점프 기능 의 소결

11761 단어 C#페이지점프
머리말   ASP.NET 은 탁월 한 이벤트 구동 프로 그래 밍 모델 을 제공 하여 개발 자 들 로 하여 금 응용 프로그램의 전체적인 디자인 을 간소화 하 게 했 습 니 다.그러나 이것 은 고유 한 문제 도 발생 했 습 니 다.예 를 들 어 전통 적 인 ASP.NET 을 사용 하면 POST 방법 으로 페이지 간 전달 치 를 쉽게 실현 할 수 있 습 니 다.똑 같은 일 은 이벤트 구동 프로 그래 밍 모델 을 사용 하 는 ASP.NET 이 쉽 지 않 습 니 다.물론 우 리 는 여전히 같은 기능 을 실현 할 수 있 는 방법 이 있다.본 고 는 서로 다른 가능 한 방법 으로 이 문 제 를 해결 하려 고 노력 할 것 입 니 다.그러나 본 고 는 query string,session 변수 와 server.Transfer 방법 으로 페이지 간 의 값 전달 을 실현 할 것 임 을 예견 할 수 있 습 니 다.
QueryString 을 사용 하여 QuerySting 을 사용 하여 페이지 간 에 값 을 전달 하 는 것 은 이미 오래된 메커니즘 입 니 다.이러한 방법의 주요 장점 은 실현 이 매우 간단 하 다 는 것 입 니 다.그러나 전달 하 는 값 은 브 라 우 저의 주소 표시 줄 에 표시 되 는(안전 하지 않 음)이 고 대상 을 전달 할 수 없 지만 전달 하 는 값 이 적 고 안전성 에 대한 요구 가 높 지 않 은 상황 에서이 방법 은 그래도 괜 찮 은 방안 이다.이런 방법 을 사용 하 는 절 차 는 다음 과 같다.
1.컨트롤 로 웹 폼 만 들 기(form)
2.폼 을 되 돌려 줄 단추 와 링크 단 추 를 만 듭 니 다.
3.버튼 이나 링크 단 추 를 누 른 이벤트 에 URL 을 저장 하 는 문자 변 수 를 만 듭 니 다.
4,저 장 된 URL 에 QueryString 인자 추가
5,Response.Redirect 를 사용 하여 위 에 저 장 된 URL 로 변경
아래.

<STRONG>private void Button1_Click (object sender, System.EventArgs e) 

          string url; 
          url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;          
          Response.Redirect(url); 
 } 
</STRONG>
대상 페이지 코드:

<STRONG>private void Page_Load (object sender, System.EventArgs e)
 {
               Label1.Text=Request.QueryString["name"]; 
               Label2.Text=Request.QueryString["email"];
 }
</STRONG>
이 방법 을 어떻게 실현 하 는 지 보 여 주 는 코드 세 션 입 니 다.   원본 페이지 코드:
 세 션 변수 사용   세 션 변 수 를 사용 하 는 것 은 페이지 간 에 값 을 전달 할 수 있 는 다른 방식 입 니 다.이 예 에서 우 리 는 컨트롤 의 값 을 세 션 변수 에 존재 한 다음 다른 페이지 에서 사용 하여 서로 다른 페이지 간 에 값 을 전달 하 는 목적 을 실현 합 니 다.그러나 주의해 야 할 것 은 Session 변수 에 너무 많은 데 이 터 를 저장 하면 서버 자원 을 많이 소모 할 수 있 으 므 로 session 을 사용 할 때 신중 해 야 합 니 다.물론 필요 하지 않 은 session 을 제거 하여 자원 의 불필요 한 소 모 를 줄 여야 합 니 다.Session 변수 전달 값 을 사용 하 는 일반적인 절 차 는 다음 과 같 습 니 다.
1,페이지 에 필요 한 컨트롤 추가
2.폼 을 되 돌려 줄 단추 와 링크 단 추 를 만 듭 니 다.
3.단추 나 링크 단 추 를 누 르 는 이벤트 에서 컨트롤 의 값 을 session 변수 에 추가 합 니 다.
4,Response.Redirect 방법 으로 다른 페이지 로 다시 설정
5.다른 페이지 에서 session 의 값 을 추출 합 니 다.이 session 을 사용 하지 않 아 도 되 는 지 확인 할 때 아래 코드 세 션 을 명시 적 으로 제거 하 는 방법 을 보 여 줍 니 다.
   원본 페이지 코드:

<STRONG>private void Button1_Click (object sender, System.EventArgs e)
 { 
          //textbox1 and textbox2 are webform 
          //controls
           Session["name"]=TextBox1.Text;  
           Session["email"]=TextBox2.Text; 
           Server.Transfer("anotherwebform.aspx"); 
}  
</STRONG>
대상 페이지 코드:

<STRONG>private void Page_Load (object sender, System.EventArgs e)
 {
             Label1.Text=Session["name"].ToString(); 
             Label2.Text=Session["email"].ToString(); 
             Session.Remove("name"); 
             Session.Remove("email"); 
}
</STRONG>
Server.Transfer   이 방법 은 위 에서 소개 한 방법 에 비해 약간 복잡 하지만 페이지 간 값 전달 에 있어 서 특히 유용 합 니 다.이 방법 을 사용 하면 다른 페이지 에서 대상 속성 으로 표 시 된 값 을 액세스 할 수 있 습 니 다.물론 이 방법 을 사용 하려 면 다른 페이지 에서 접근 할 수 있 도록 코드 를 추가 로 써 야 합 니 다.단,이 방식 이 가 져 온 장점 도 분명 하 다.전체적으로 이런 방법 을 사용 하 는 것 은 간결 하면 서도 대상 을 대상 으로 하 는 것 이다.이런 방법 을 사용 하 는 전체 과정 은 다음 과 같다.
1,페이지 에 필요 한 컨트롤 추가
2,반환 값 을 만 드 는 Get 속성 과정
3.폼 을 되 돌려 줄 단추 와 링크 단 추 를 만 듭 니 다.
4.단 추 를 누 르 면 이벤트 처리 프로그램 에서 server.Transfer 방법 을 지정 한 페이지 로 이동 합 니 다.
5.두 번 째 페이지 에서 우 리 는 Context.Handler 속성 을 사용 하여 이전 페이지 인 스 턴 스 대상 의 인용 을 얻 을 수 있 습 니 다.이 를 통 해 이전 페이지 의 컨트롤 값 을 액세스 할 수 있 습 니 다.다음 코드 는 상기 절차 과정 을 종합 적 으로 실현 하 는 코드 입 니 다. 
원본 페이지 코드:     다음 코드 를 페이지 에 추가 합 니 다.

<STRONG>public string Name { get { return TextBox1.Text; } }

public string EMail { get { return TextBox2.Text; } }   
</STRONG>
그리고 Server.Transfer 방법 을 호출 합 니 다.

<STRONG>private void Button1_Click (object sender, System.EventArgs e) { Server.Transfer("anotherwebform.aspx"); } 
</STRONG>
대상 페이지 코드:
anotherwebform.aspx 에 서 는 첫 번 째 말

<%@ Reference Page="~/GCSetting.aspx" %>
을 추가 한 다음 anotherwebform.aspx.cs 에 다음 과 같이 추가 해 야 합 니 다.

<STRONG>private void Page_Load(object sender, System.EventArgs e)
{
      //create instance of source web form
      WebForm1 wf1;
      //get reference to current handler instance
      wf1=(WebForm1)Context.Handler;
      Label1.Text=wf1.Name;
      Label2.Text=wf1.EMail;
}
</STRONG>
보충:
Response.Redirect  페이지 전환 실현
기능:현재 클 라 이언 트 브 라 우 저 를 다른 URL 페이지 로 연결 합 니 다.
      문법:Response.Redirect("문자열")
      설명:문자열 은 웹 페이지 URL 입 니 다.절대 경로 나 상대 경로 일 수 있 습 니 다.
      리 셋 방법 Response.Redirect("문자열",false)를 바 꿀 수도 있 습 니 다.true 로 설정 하면 페이지 코드 가 모두 실행 되 거나 Flush 나 End 방법 을 호출 한 후에 야 서버 는 페이지 실행 결 과 를 클 라 이언 트 에 보 냅 니 다.그렇지 않 으 면 서버 가 실행 하면 서 보 냅 니 다.ASP 3.0 이상 버 전의 기본 값 은 true 입 니 다.윈도 2000 의 IIS 5 기본 값 도 true 입 니 다.
Response.Redirect 이 페이지 를 뛰 어 넘 는 방법 은 두 번 다시 보 내야 하기 때문에 속도 가 빠 르 지 않 습 니 다.사이트 페이지 제한 없 이 모든 페이지 로 이동 할 수 있 지만 로그 인 보 호 를 건 너 뛸 수 없습니다.속도 가 느 린 것 이 가장 큰 결함 이다.
     그 전환 메커니즘 은 먼저 서버 측 에서 http 요청 을 클 라 이언 트 에 보 내 고 새로운 페이지 로 이동 해 야 한 다 는 것 을 알 린 다음 에 클 라 이언 트 가 서버 측 으로 이동 요청 을 보 내 는 것 이다.주의해 야 할 것 은 점프 후 내부 공간 에 저 장 된 모든 데이터 정 보 를 잃 어 버 리 기 때문에 Session 을 사용 해 야 합 니 다.
2.Response.Redirect 새 창 을 여 는 두 가지 방법      
    일반적으로 Response.Redirect 방법 은 서버 에서 방향 을 바 꾸 기 때문에 Response.Write("window.location="을 사용 하 는 것 을 제외 합 니 다.http://dotnet.aspx.cc';")방법 외 에 다른 방법 은 새 창 에서 지정 한 것 을 열 수 없습니다.  URL 주소 의.
하지만 form 요소 의 target 속성 을 설정 하면 새 창 을 열 수 있 습 니 다.다음은 채택 할 수 있 는 두 가지 방법 이다.
방법 1:서버 쪽 에 target 속성 을 설정 합 니 다.이 방법 은 클 라 이언 트 가 스 크 립 트 를 지원 하지 않 는 경우 에 도 매우 적합 합 니 다.코드 는 다음 과 같 습 니 다:

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        form1.Target = "_blank";
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body id="b" runat="server">
<form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text=" Tab " />
</form>
</body>
</html>

방법 2:클 라 이언 트 스 크 립 트 의 방법 으로 target 속성 을 설정 합 니 다.코드 는 다음 과 같 습 니 다:

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Attributes.Add("onclick", "this.form.target='_newName'");
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body id="b" runat="server">
<form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text=" Tab " />
</form>
</body>
</html>

위의 두 가지 방법 중 target 속성 은 합 법 적 인 이름 을 사용 할 수 있 지만,같은 이름 의 창 이 열 렸 다 면 새 창 은 이미 존재 하 는 이름 의 창 에서 열 릴 것 입 니 다.
업데이트:팝 업 창의 너비 와 높이 를 설정 하려 면 다음 방법 으로 변경 할 수 있 습 니 다.

<STRONG><%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
      string WindowName = "win" + System.DateTime.Now.Ticks.ToString();
      Page.RegisterOnSubmitStatement("js", "window.open('','" + WindowName + "','width=600,height=200')");
        form1.Target = WindowName;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body id="b" runat="server">
<form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text=" Tab " />
</form>
</body>
</html>
</STRONG>
3.Server.Transfer 속도 가 빨 라 서 한 번 의 postback 만 필요 하지만 같은 사이트 에서 뛰 어야 합 니 다.서버.Transfer 의 리 셋 요청 은 서버 에서 발생 합 니 다.이 컨트롤 을 새로운 웹 페이지 에 만 전달 하고 클 라 이언 트 에서 이 웹 페이지 를 다시 찾 지 않 기 때문에 브 라 우 저의 url 주 소 는 여전히 원래 페이지 의 주소 입 니 다!또한 로그 인 보 호 를 건 너 뛸 수 있 습 니 다.기본적으로 Transfer 방법 은 폼 데이터 나 조회 문자열 을 한 페이지 에서 다른 페이지 로 전달 하지 않 지만 이 방법의 두 번 째 인 자 를 true 로 설정 하면 원래 페이지 의 폼 데이터 와 조회 문자열 을 유지 할 수 있 습 니 다.Server.Transfer("hyj.aspx"); //서버 가 이 페이지 를 실행 하지 않 고 이 페이지 의 현재 데 이 터 를 저장 한 후 페이지 를 hyj.aspx 로 전환 시 키 고 이전 데 이 터 를 hyj.aspx 페이지 에서 실 행 된 결 과 를 브 라 우 저 에 되 돌려 줍 니 다.
4.Server.Execute 이 방법 은 주로 페이지 디자인 에 사 용 됩 니 다.같은 사이트 에서 뛰 어야 하고 potback 도 한 번 만 필요 합 니 다.이 방법 은 한 페이지 의 출력 결 과 를 다른 aspx 페이지 에 삽입 해 야 할 때 사용 하 며,대부분 표 에서 한 페이지 를 다른 페이지 에 끼 워 넣 는 것 과 유사 하 게 존재 합 니 다.Server.Execute("hyj.aspx");//서버 가 이 페이지 의 현재 데 이 터 를 저장 한 후,페이지 를 hyj.aspx 로 돌려 실행 하고,hyj.aspx 가 실 행 된 후에 다시 이 페이지 로 돌아 가 계속 실행 하고,세 가지 결 과 를 합쳐서 브 라 우 저 에 되 돌려 줍 니 다.Execute 방법 은 함수 호출 과 유사 합 니 다.페이지 의 방향 을 바 꾸 는 방법 을 선택 하 는 방법:asp.net 에서 페이지 전환 방식-Redirect,Transfer,Execute,하이퍼링크,HyperLink 컨트롤.사용 자 를 다른 서버 의 페이지 로 옮 겨 야 할 때 Redirect 를 사용 합 니 다.사용 자 를 비 aspx 페이지 로 옮 겨 야 할 때 html,Redirect 를 사용 하여 검색 문자열 을 url 의 일부분 으로 서버 에 전송 해 야 할 때 Redirect 를 사용 합 니 다.다른 두 가지 방법 으로 는 post back 을 2 번 할 수 없 기 때 문 입 니 다.서버 로 데 이 터 를 가 져 오 려 면 aspx 페이지 간 의 변환(로그 인 관련 없 음)이 필요 합 니 다.Transfer 를 사용 하면 aspx 페이지 의 출력 결 과 를 다른 aspx 페이지 에 삽입 할 때 Execute 를 사용 합 니 다.사용자 가 페이지 를 언제 돌 릴 지 결정 하려 면 하이퍼링크 를 사용 하 십시오.프로그램 으로 전환 목 표를 제어 하려 면 사용자 가 결정 하고 웹 서버 의 HyperLink 컨트롤 을 사용 하여 NavigateUrl 속성 을 동적 으로 설정 합 니 다.

좋은 웹페이지 즐겨찾기