asp.Netページの値伝達のいくつかの方法

4233 ワード

この記事では、azamsharpがASPを紹介します.NETページの値伝達方式.本明細書で挙げた例は、1つのテキストボックスといくつかのボタンのみを含み、ボタンがクリックされると、テキストボックスの文字列が異なる方法で別のページに渡される.
1. Response.Redirect
 
  
Response.Redirect("WebForm5.aspx");

まず、Responseを見てみましょう.Redirectメソッド、これは最も簡単なはずです.Responseをクリックすると.Redirectボタンを押すと、上の行のコードがトリガーされます.ここでは、try{...}に上のコードを置くこともあります.catch()では、つまり異常をキャプチャし、別のページに異常を渡します.これを試してみると、別のページにジャンプし、元のページスレッドがまだ実行されているため、「System.Threading」例外が得られるかもしれません.この問題を解決するには、次のようにします.
 
  
Response.Redirect("WebForm5.aspx",false);

これは、コンパイラに「WebForm 5.aspx」を教えるとともに、「false」パラメータはコンパイラに元のページでのアクティビティを停止しないように伝えることを意味し、Systemを参照することができる.Threadingクラス.
次のコードでは、「txtName」は値を伝えるテキストボックスの名前で、それは「?」についています.後のNameは、txtNameの値を担持する一時response変数のフラグです.
 
  
private void Button1_Click(object sender, System.EventArgs e)
{
// Value sent using HttpResponse
Response.Redirect("WebForm5.aspx?Name="+txtName.Text);
}

OK、この位置で、Responseのパスを完了しました.しかし、「WebForm 5.aspx」ではどのようにして伝達された値を受信しますか?焦らないで「WebForm 5.aspx」のpage_Loadイベントに次のコードを書きます.まず、伝達された値が「null」ではないことを確認し、「null」でなければ、Labelでこの値を表示することができます.
注意:Responseを使用するとRedirectが変数を渡すと、すべての変数がブラウザのURLに表示され、クレジットカード番号などの重要な機密データを渡すことはできません.
 
  
if (Request.QueryString["Name"]!= null)
Label3.Text = Request.QueryString["Name"];

2.Cookies方式
次にcookiesを使用します.Cookiesはサービス側によって作成されますが、クライアントに保存されます.「Cookies」ボタンをクリックすると、次のコードが実行されます.
 
  
HttpCookie cName = new HttpCookie("Name");
cName.Value = txtName.Text;
Response.Cookies.Add(cName);
Response.Redirect("WebForm5.aspx");

まず、「cName」というクッキーインスタンスを作成しました.クッキーインスタンスは複数の値を保存できるので、コンパイラにこのクッキーが「Name」の値を保存し、txtName.Textの値を割り当て、「出力ストリーム」に追加し、Response.Redirectを使用して別のページに出力します.
次に、ターゲットページでこのクッキーの値を取り出す方法を見てみましょう.
 
  
if (Request.Cookies["Name"] != null )
Label3.Text = Request.Cookies["Name"].Value;

明らかに、手順は次の方法と非常に似ているが、Requestを使用するだけだ.CookiesがRequestに代わったQueryString.
注意:一部のブラウザではCookiesはサポートされていません.
3.Session変数
次に、サービス側で維持されるSession変数を見てみましょう.Sessionは、ユーザーがサービス側に最初の要求を発行したときに作成され、ユーザーがブラウザを閉じたり、異常が発生したりしたときに終了します(実際には期限切れの場合もあります).次のコードはSessionで値を伝える例です.Sessionがユーザーに「Name」キーを作成し、TextBoxの値を割り当てていることがわかります.
 
  
// Session
Session["Name"] = txtName.Text;
Response.Redirect("WebForm5.aspx");
// Session
//
if(Session["Name"] != null)
Label3.Text = Session["Name"].ToString();

4.アプリケーション変数
すべてのページにアクセスできる値が必要な場合があります.この場合、アプリケーション変数を使用できます.次のコードに示すように、アプリケーション変数を作成して値を割り当てると、Webサイト(プロジェクト)のすべてのページで取得できます.
 
  
// Application
Application["Name"] = txtName.Text;
Response.Redirect("WebForm5.aspx");
// Application
if( Application["Name"] != null )
Label3.Text = Application["Name"].ToString();

5. Server.Transfer方式(またはHttpContext方式)
サーバも使用できます.Transfer方式(またはHttpContext方式)はページ間で変数を渡します.この場合、渡す変数は属性や方法で得ることができ、属性を使うのが簡単です.では、最初のページにTextBox値を取得するためのプロパティを書きます.
 
  
public string GetName
{
get { return txtName.Text; }
}

サーバを使用する必要があります.Transferはこの値を別のページに送信します.サーバーに注意してください.Transferは、コントロールを新しいページに送信するだけで、ブラウザを別のページにリダイレクトすることはありません.だから、私たちがアドレスバーでまだ見ているのは元のページのURLです.次のコードを示します.
Server.Transfer("WebForm5.aspx");
次に、「WebForm 5.aspx」について見てみましょう.
 
  
// You can declare this Globally or in any event you like
WebForm4 w;
// Gets the Page.Context which is Associated with this page
w = (WebForm4)Context.Handler;
// Assign the Label control with the property "GetName" which returns string
Label3.Text = w.GetName;

終了:
我々が見たように,種々の伝達方式にはそれぞれ優劣があり,異なる場合に適切な方式を選択することが重要である.