2013년 11월 11일 월요일

[C#, ASP.NET 교육강좌]ASP.NET, Web Form(3) – 폼사이의 데이터 전송

[C#, ASP.NET 교육강좌]ASP.NET, Web Form(3) – 폼사이의 데이터 전송

이번에는 Server.Transfer를 이용하여 페이지 사이의 값의 전달에 대해 알아 보도록 하겠습니다. 폼끼리 값을 전송 하는 방법은 쿼리 스트링을 이용하는 방법 FORM Tag, 세션을 이용 하는 방법, 아래의 예처럼 프로퍼티를 이용하는 방법 등이 있습니다.

클래스의 속성(property)을 사용하여 값 저장 합니다., 프로퍼티에 관한 내용은 C# 강좌를 참고 하시기 바랍니다.

(1)원본 페이지에 공유할 값을 속성(Property)으로 정의
전달할 값 을 위한 Get 접근자 이용

이 클래스에 있는 name이라는 값을 다른 곳에서 사용하고 싶을 때 쓰입니다.
(main.aspx)
public TextBox Name  //Property 정의
        {
                get
                {
                  return name;  //전달값 return
                }
        }


(2)원본 페이지의 속성값 접근

Context.Handler(IHttpHandler interface) 속성을 사용하여 처리할 객체 접근 합니다.
main fp = (main)Context.Handler;

main.aspx의 프로퍼티를 통해 Name의 값을 현재의 페이지에서 읽어 옵니다.

TextBox1.Text = fp.Name;


[예제 – VS .Net을 이용하여 작성 한 예젭니다.]
main.aspx에서 이름을 입력하여 버튼을 누르면 test.aspx에서 값을 받는 예제 입니다.

1.        main.aspx

<%@ Page Language="C#" Codebehind="main.aspx.cs" AutoEventWireup="false" Inherits="WebApplication2.main" %>
<HTML>
        <body>
                <form runat="server" ID="Form1">
                        <asp:TextBox id="txtMsg" runat="server" />
                        <asp:Button id="btnSend" Text="Send" runat="server" onClick="btnSend_Click" />
                </form>
        </body>
</HTML>

2.        main.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WebApplication2
{
        /// <summary>
        /// WebForm1에 대한 요약 설명입니다.
        /// </summary>
        public class main : System.Web.UI.Page
        {
                protected System.Web.UI.WebControls.Button btnSend;
                protected System.Web.UI.WebControls.TextBox txtMsg;

                public string ShareName     
                {
                        get
                        {
                                return txtMsg.Text;     
                        }
                }

                override protected void OnInit(EventArgs e)
                {
                        //
                        // CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
                        //
                        InitializeComponent();
                        base.OnInit(e);
                }
               
                private void InitializeComponent()
                {
                        this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
                        this.Load += new System.EventHandler(this.Page_Load);

                }

                public void btnSend_Click(object o, System.EventArgs e)
                {
                        Server.Transfer("test.aspx");
                }

                private void Page_Load(object o, System.EventArgs e)
                {
                        if (!IsPostBack)
                        {
                                txtMsg.Text = "넘길 이름을 넣으세요~";
                        }
                }
               
        }
}

3.        test.aspx

<%@ Page Language="C#" Codebehind="test.aspx.cs" AutoEventWireup="false" Inherits="WebApplication2.test" %>
<HTML>
        <body>
                <form runat="server" ID="Form1">
                        <asp:Label id="secondName" runat="server" />
                </form>
        </body>
</HTML>

4.        test.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WebApplication2
{
        /// <summary>
        /// test에 대한 요약 설명입니다.
        /// </summary>
        public class test : System.Web.UI.Page
        {
                public main m;
                protected System.Web.UI.WebControls.Label secondName;

                override protected void OnInit(EventArgs e)
                {
                        //
                        // CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
                        //
                        InitializeComponent();
                        base.OnInit(e);
                }

                private void InitializeComponent()
                {
                        this.Load += new System.EventHandler(this.Page_Load);

                }
       
                public void Page_Load(object sender, System.EventArgs e)
                {         
                       

                                m = (main)Context.Handler;
                                if (m != null)
                                {                 
                                        secondName.Text = m.ShareName ;         
                                }
                         
                }
        }
}

[결과]
 


 

참고로 아래는 데브피아에 있는 내용으로 류종현의 님의 글입니다.

폼사이의 데이터의 전달에 관한 내용 입니다.

출처: http://www.dotnetbips.com/displayarticle.aspx?id=79
제목: Passing Values between ASP.NET Web Forms

자세한 설명은 위의 원문을 참고하시고, 코드만 설명드리겠습니다.

1. 쿼리스트링
현재웹폼
private void Button1_Click(object sender, System.EventArgs e)
{
    string url;
    url="anotherwebform.aspx?name=" +
        TextBox1.Text + "&email=" +
        TextBox2.Text;
    Response.Redirect(url);
}

대상웹폼
private void Page_Load(object sender, System.EventArgs e)
{
    Label1.Text=Request.QueryString["name"];
    Label2.Text=Request.QueryString["email"];
}

현재웹폼에서 Response.Redirect 메소드로 대상웹폼으로 이동하게 되는데 여기서 쿼리스트링으로 넘깁니다.
ASP와 같은 방법입니다.

2. 세션
현재웹폼
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");
}

대상웹폼
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");
}

세션을 현재웹폼에서 생성해주는데 대상웹폼으로 세션값을 전달하려면 Server.Transfer 로 대상웹폼을 끌어옵니다.
그리고 값을 유지하는것이 아니고 전달할려하기 때문에 Session.Remove 로 세션을 제거합니다.

3. 프로퍼티
현재웹폼
public string Name
{
    get
    {
        return TextBox1.Text;
    }
}

public string EMail
{
    get
    {
        return TextBox2.Text;
    }
}

private void Button1_Click(object sender, System.EventArgs e)
{
    Server.Transfer("anotherwebform.aspx");
}

대상웹폼
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;
}

댓글 없음:

댓글 쓰기