ASP.NETがページ間値伝達を実現するいくつかの方法

5868 ワード

1つ目の方法:
URLリンクアドレスで渡す
send.aspx:
 
       protected void Button1_Click(object sender, EventArgs e)
          { 
                   Request.Redirect("Default2.aspx?username=honge");
         }

 receive.aspx: 
string username = Request.QueryString["username"];これによりパラメータ値が得られます.
2つ目の方法:
post方式で.
send.aspx                 receive.aspx 
          string username = Ruquest.Form["receive"];
3つ目の方法:
セッションを通して
send.aspx:  
       
       protected void Button1_Click(object sender, EventArgs e) 
            { 
                       Session["username"] = "honge"; 
                       Request.Redirect("Default2.aspx"); 
            } 

receive.aspx:
              string username = Session["username"].Tostring();これによりパラメータ値が得られます.
4つ目の方法:
アプリケーション経由
send.aspx: 
  
      protected void Button1_Click(object sender, EventArgs e)
       {
                Application["username"] = "honge"; Request.Redirect("Default2.aspx");
       }

   receive.aspx: 
       string username = Application["username"];これによりパラメータ値が得られます.
5つ目の方法:
サーバを介してTransfer
      send.aspx:
    
          public string Name 
             {
                      get { return "honge"; }
               } 
               protected void Button1_Click(object sender, EventArgs e) 
             { 
                      Server.Transfer("Default2.aspx");
              } 

          receive.aspx: 
    
         send d = Context.Handler as send ; if (d != null)
               {
                       Response.Write(d.Name);         。
              }
 

もしasp.Net 2.0では、PreviousPageで
  PreviousPage d = Context.Handler as PreviousPage ; if(d!=null){Response.Write(d.Name);//これによりパラメータ値が得られます.}
次のように使用できます.
send.aspx:  receive.aspx: 
    string name = PreviousPage.Name;これによりパラメータ値が得られます.
もしあなたのページにMasterPageが使われていたらServer.Transferが伝えたPreviousPageは無効で、それがどういう理由なのか分かりません.MasterPageを使う場合はSessionかContextを使うのがベストです.Items[username]で実現します.
QueryStringの使用
QueryStingを使用してページ間で値を渡すのは古いメカニズムですが、この方法の主な利点は実現が非常に簡単であることですが、その欠点は、ブラウザのアドレスバーに表示される(安全ではない)値を渡すと同時にオブジェクトを渡すことができないことですが、伝達される値が少なく、安全性の要求が高くない場合、この方法は良い方法です.この方法を使用するには、1、コントロールを使用してウェブフォームを作成する2、フォームに戻るボタンとリンクボタンを作成する3、ボタンまたはリンクボタンのクリックイベントにURLを保存する文字変数を作成する4、保存したURLにQueryStringパラメータ5を追加し、Responseを使用する.Redirect上に保存したURLにリダイレクト
次のコード・スライスでは、この方法を実装する方法を示します.
ソースページコード:
  
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"]; 
 }
Session変数の使用
Session変数を使用することは、ページ間で値を伝達する別の方法であり、この例ではコントロールの値をSession変数に存在させ、別のページで使用して、異なるページ間で値伝達の目的を実現します.ただし、Session変数にデータを格納しすぎるとサーバリソースが消費されるので注意が必要です.sessionを使用する場合は慎重にしてください.もちろん、不要なsessionを除去するためにクリーンアップアクションを使用して、リソースの無駄な消費を低減する必要があります.Session変数を使用して値を渡す一般的な手順は、1ページに必要なコントロール2を追加し、フォームに戻るボタンとリンクボタン3を作成し、ボタンやリンクボタンのクリックイベントにコントロールの値をsession変数に追加する4、Responseを使用する.Redirectメソッドは別のページ5にリダイレクトし、別のページでセッションの値を抽出し、セッションを使用する必要がないと判断した場合に明示的にクリアします.
次のコード・スライスでは、この方法を実装する方法を示します.
ソースページコード:
  
private void Button1_Click  (object sender, System.EventArgs e) 
 { 
               file://textbox1 and textbox2 are webform  file://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");  
}
サーバを使用します.Transferという方法は、上記の方法に比べて少し複雑ですが、ページ間の値伝達では特に役立ちます.この方法では、別のページでオブジェクト属性で表示された値にアクセスできます.もちろん、この方法では、別のページでアクセスできるように、いくつかの属性を作成するために追加のコードを書く必要がありますが、この方式がもたらすメリットも明らかだ.全体的に,この方法を用いることは簡潔であり,オブジェクト向けである.この方法を用いるプロセス全体は、1ページに必要なコントロール2を追加し、戻り値のGet属性プロセス3を作成し、フォームに戻るボタンとリンクボタン4を作成し、ボタンクリックイベントハンドラでサーバを呼び出す.Transferメソッドは指定されたページ5に移行し、2番目のページではContextを使用することができる.Handlerプロパティは、前のページインスタンスオブジェクトの参照を取得します.これにより、前のページにアクセスするコントロールの値を使用できます.
次のコードは、上記の手順のコードを総合的に実現します.
ソースページコード:
次のコードをページに追加します.
  
public string Name 
 {   get   {   return TextBox1.Text;   }  } 
 public string EMail 
 {   get   {   return TextBox2.Text;   }  }
サーバを呼び出します.Transferメソッド
  
private void Button1_Click  (object sender, System.EventArgs e)
  {   Server.Transfer("anotherwebform.aspx");  }
ターゲットページコード:
  
private void Page_Load  (object sender, System.EventArgs e) 
{   file://create instance of source web form   WebForm1 wf1;   file://get reference to current handler instance   wf1=(WebForm1)Context.Handler;   Label1.Text=wf1.Name;   Label2.Text=wf1.EMail;  }
まとめ
本稿では,異なる手法を用いるASPを実現することについて述べる.NETページ間の値伝達、この3つの方法はQueryString、Session、Serverである.Transfer、私たちはいくつかの方法の異同を体得しなければならない.私はこの文章があなたのコードの中で自由に使えるようになるまで、あなたに役に立つことを望んでいます.