ASP.NETページ転送5種類

3771 ワード

1.QueryString変数の使用
QueryStringは非常に簡単な値伝達方式で、ブラウザのアドレスバーに転送された値を表示することができます.この方法は、1つ以上のセキュリティ要件が高くない場合や、構造が簡単な数値を渡す場合に使用できます.しかし配列やオブジェクトを渡すには,この方法は使えない.次に例を示します.
 

       a.aspx C#  
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
b.aspx C#  
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}

2.アプリケーションオブジェクト変数の使用
Applicationオブジェクトの役割範囲は、グローバル全体、つまりすべてのユーザーに有効です.その一般的な方法はLockとUnLockである.
 
 

       a.aspx C#  
private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}
b.aspx C#  
private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}

3.Session変数の使用
これはきっと皆さんが使っている中で最も一般的な使い方に違いありません.その操作はApplicationと似ていて、ユーザー個人に作用します.そのため、過剰なストレージはサーバーのメモリリソースの消費を招きます.
 
 

       a.aspx C#  
private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}

b.aspx C#  
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}

4.Cookieオブジェクト変数の使用
これもよく使われる方法で、Sessionと同じように、ユーザー一人一人にとって何なのかということですが、Cookieはクライアントに保存され、sessionはサーバ側に保存されているという本質的な違いがあります.そしてCookieの使用はASPに合わせる.NET内蔵オブジェクトRequestを使用します.
 

       a.aspx C#  
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
Server.Transfer("b.aspx");
}
b.aspx C#  
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Request.Cookie["name"].Value.ToString();
}

5.サーバーを使用します.Transferメソッド
これこそ,顔象オブジェクトの開発に用いる手法であり,サーバを用いるといえる.Transferメソッドは,プロセスを現在のページから別のページに導くが,新しいページは前のページの応答フローを用いるため,このメソッドは完全に面象オブジェクトであり,簡潔で有効である.
 
 

       a.aspx C#  
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}
b.aspx C#  
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //  a  
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}

値の伝達方法が多い
追加しています
Cross-Page Posting
ソース・ページと同じアプリケーションにあるページにナビゲートすると、ソース・ページの値と共通属性を読み取ることができますが、ブラウザの再整理や前のステップを踏まないでください.これにより、予想外の効果が得られます.
 
 

       eg:
aspx
    : 
Text="  " OnClick="btn_name_Click" />
cs:
TextBox name = (TextBox)PreviousPage.FindControl("name");
// public   
Label1.Text = "   :" + name.Text;

previouspage自体はpageクラスに属する、ソースページとターゲットページのみが同じaspに属する.Netアプリケーションの下で参照することができます.WebページがWebページにまたがって公開されていない場合、またはWebページが異なるアプリケーションの中にある場合、previouspage属性は初期化されません.previouspageを使用して情報にアクセスし、Webページの共通属性を得ることはできません.
 
 

       source.cs:
public string UserName
{
get{return aa.text;}
}
cross-page posting.aspx:
cross-page posting.cs:
lab.text = previousopage.username;

//1ページに1つのpreviousPageしか指示できません.そうしないとコンパイルエラーが発生します.