ASP.NETではページ間で値を渡すいくつかの方法で整理します

6728 ワード

しかし、一般的によく使われるのは、QueryString、Session、Cookies、Application、Serverです.Transfer.
一、QueryString QueryStringは非常に簡単な値伝達方式であり、彼は転送した値をブラウザのアドレスバーに表示することができる.この方法は、1つ以上のセキュリティ要件が高くない場合や、構造が簡単な数値を渡す場合に使用できます.しかし配列やオブジェクトを渡すには,この方法は使えない.
この方法の利点:1.簡単に使用すると、セキュリティ要件が高くない場合に数値やテキスト値を渡すのに有効です.
この方法の欠点:1.ブラウザのURLアドレスに値が露出しているため、セキュリティが欠けています.
          2.オブジェクトを渡すことはできません.
使用方法:1.ソースページのコードに渡す名前と値でURLアドレスを構築します.
       2.ソースページのコードはResponse.Redirect(URL);上のURLアドレスにリダイレクトします.
       3.目的ページのコードにRequestを使用する.QueryString["name"];URLアドレスに渡された値を取り出します.
例:(1)a.aspx
 
  
private void Button1_Click(object sender, System.EventArgs e)
{
  string s_url;
  s_url = "b.aspx?name=" + Label1.Text;
  Response.Redirect(s_url);
}

  (2)b.aspx
 
  
private void Page_Load(object sender, EventArgs e)
{
  Label2.Text = Request.QueryString["name"];
}

  
二、Session
これはきっと皆さんが使っている中で最も一般的な使い方に違いありません.その操作はApplicationと似ていて、ユーザー個人に作用します.そのため、過剰なストレージはサーバーのメモリリソースの消費を招きます.
利点:1.シンプルを使用すると、単純なデータ型だけでなく、オブジェクトも転送できます.
     2.データ量の大きさは制限されません.
欠点:1.Session変数に大量のデータを格納すると、サーバリソースが消費されます.
     2.紛失しやすい.
使用方法:1.ソースページのコードに渡す名前と値を作成してSession変数を構築します:Session[Name]=[Value(Or Object)];
       2.宛先ページのコードでSession変数を使用して渡された値を取り出します.Result = Session["Nmae"]
注意:sessionは使わない时にそれを破壊することができて、破壊の方法は:1つをクリアします:Session.Remove(「session名」);
すべてクリア:Session.Clear();
例:(1)a.aspx
 
  
private void Button1_Click(object sender, System.EventArgs e)
{
  Session["name"] = Label.Text;
}

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

  
三、Cookie
これも一般的に使われている方法で、Cookieはユーザーブラウザに小さなブロックの情報を格納したり、ユーザーがあるサイトにアクセスしたときのユーザーのID、ユーザーの好みなど、ユーザーの関連情報を保存したりするために使用され、ユーザーが次回アクセスすると検索によって以前の情報を得ることができます.したがってCookieはページ間で値を渡すこともできます.CookieはHTTPヘッダを介してブラウザとサーバの間を往復する.Cookieには文字列の値しか含まれません.Cookieに整数値を格納するには、文字列の形式に変換する必要があります.
Sessionと同様に、各ユーザにとって何であるかは異なりますが、Cookieはクライアントに格納され、sessionはサーバ側に格納されているという本質的な違いがあります.そしてCookieの使用はASPに合わせる.NET内蔵オブジェクトRequestを使用します.
利点:1.使用が簡単で、ユーザーの状態を維持するのに非常によく使われる方法です.たとえば、ショッピングサイトでユーザーが複数のページフォームにまたがっている場合、ユーザーの状態を維持するために使用できます.
欠点:1.ユーザーのプライバシーを収集するために使われていると批判されることが多い.
     2.安全性が高くなく、偽造しやすい.
  
使用方法:
1.ソースページのコードに渡す名前と値を作成してCookieオブジェクトを構築します.
HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");
Response.Cookies.Add(cookie);
2.宛先ページのコードでCookieオブジェクトを使用して渡す値を取り出す:Result=Request.Cookies[ "myCookie"].Value;
例:(1)a.aspx
 
  
private void Button1_Click(object sender, System.EventArgs e)
{
  HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");
  Response.Cookies.Add(objCookie);
}

  (2)b.aspx
 
  
string myName1Value;
myName1Value = Request.Cookies[ "myCookie" ].Value;

  
四、アプリケーションアプリケーションオブジェクトの役割範囲はグローバル全体であり、つまりすべてのユーザーに有効である.グローバル変数を使用するのと同様に、アプリケーションのライフサイクル全体で有効であるため、異なるページでアクセスできます.Session変数との違いは、前者はすべてのユーザが共有するグローバル変数であり、後者は各ユーザ独自のグローバル変数である.
すべてのユーザーがアプリケーション変数を使用できる以上、彼はどんな場合に使用できますか?ここでは、Webサイトへのアクセス数を例に挙げます.複数のリクエストがアクセスされたときに操作できます.
利点:1.使用が簡単で、サーバリソースの消費量が少ない.
     2.単純なデータだけでなく、オブジェクトも転送できます.
     3.データ量の大きさは制限されません.
欠点:1.グローバル変数として誤操作されやすい.したがって、単一のユーザが使用する変数は一般的にアプリケーションでは使用できません.
使用方法:1.ソースページのコードに渡す名前と値を作成してApplication変数を構築します:Application[「Nmae」=「Value(Or Object)」;
       2.宛先ページのコードでは、アプリケーション変数を使用して渡された値を取り出します.Result = Application["Nmae"]
注意:同時変更を防止するために、lockメソッドとunlockメソッドを使用してロックとロックを解除します.
例:(1)a.aspx
 
  
private void Button1_Click(object sender, System.EventArgs e)
{
  Application["name"] = Label1.Text;
}

  (2)b.aspx
 
  
private void Page_Load(object sender, EventArgs e)
{
  string name;
  Application.Lock();
  name = Application["name"].ToString();
  Application.UnLock();
}

五、ServerTransferこれこそ,サーバを使用するフェースオブジェクトの開発に用いる手法といえる.Transferメソッドは,プロセスを現在のページから別のページに導くが,新しいページは前のページの応答フローを用いるため,このメソッドは完全に面象オブジェクトであり,簡潔で有効である.
  Server.Transferは、現在のASPXページから新しいASPXページに移行する、サーバ側が新しいページを実行して出力、新しいページでContext.Handlerは、前のページに渡す各種データ型の値、フォームデータ、QueryStringを取得する.リダイレクトは完全にサーバ側で完了するため、クライアントブラウザのURLアドレスは変更されません.サーバを呼び出すTransferの場合、現在のASPXページは実行を終了し、実行プロセスは別のASPXページに移行しますが、新しいASPXページは前のASPXページで作成した応答フローを使用します.
ps:サーバを比較する.TransferとResponse.Redirectの違い.
    (1)Server.Transferはサーバ側で完了するので、クライアントブラウザのURLアドレスは変更されません.Response.Redirectはクライアントが完了し,サーバ側に新しいページ処理要求を提出するため,クライアントブラウザにおけるURLアドレスが変更される.
    (2)Server.Transferはサーバ側で完了し,クライアントからの要求を必要とせず,クライアントからサーバ側への要求を低減する.[2]
    (3)Server.Transferは、ローカル仮想ディレクトリで指定するページ、すなわちプロジェクト内のページにのみジャンプできますが、Response.Redirectは柔軟で、任意のURLアドレスにジャンプできます.
    (4)Server.Transferは、前のページの様々なタイプの値を新しいページに転送することができます.Response.Redirectでは、URLにパラメータが付いているか、上記の4つの方法を組み合わせて様々なタイプの値を新しいページに転送するしかありません.
利点:1.サーバ側に直接リダイレクトし、使用が簡単で便利で、クライアントがサーバ側に要求することを減らします.
     2.さまざまなデータ型の値とコントロールの値を渡すことができます.
欠点:1.クライアントブラウザのURLアドレスは変更されず、新しいページで思わぬ問題が発生する可能性があります.たとえば、ソースページと宛先ページが同じ仮想ディレクトリまたはそのサブディレクトリの下にない場合、相対パスのピクチャ、ハイパーリンクを使用すると、誤った指向が発生します.
使用方法:1.ソースページのコードでは、Pageクラスのサーバを使用します.Transferは別のページにジャンプしてページデータを渡します:Server.Transfer("b.aspx","false").
       2.目的ページでContextを使用する.Handlerがデータを受信:FormerPage=(FormerPage)Context.Handler; その後、formerPageの属性と方法で前のページの値を取得するか、Contextを直接使用します.Items["myParameter "]
例:(1)a.aspx
 
  
public string Name
{
  get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
  Server.Transfer("b.aspx");
}

(2)b.aspx
 
  
private void Page_Load(object sender, EventArgs e)
{
  a newWeb; // a
  newWeb = (source)Context.Handler;
  string name;
  name = newWeb.Name;
}

以上、よく使われるいくつかのページ間で値を伝える方法ですが、私は一般的にsessionとquerystringを使って値を伝えています.クッキーに使うことは少ないです.この記事では、これらの方法の使用方法について説明しますが、内部原理はあまり説明されていません.sessionの格納方法については、「sessionの格納方法と構成」を参照してください.