C#ページ間ジャンプ機能のまとめ

9318 ワード

引用ASP.NETは卓越したイベント駆動プログラミングモデルを提供し、開発者にアプリケーションの全体設計を簡略化させたが、これも固有のいくつかの問題をもたらした.例えば、従来のASPを使用すると、POST法を使用することでページ間伝達値を容易に実現することができ、同じことで、イベント駆動プログラミングモデルを使用するASP.NETはそんなに簡単ではありません.もちろん、同じ機能を実現する方法はいくつかあります.本稿では、この問題を解決するために異なる可能な方法を用いてみるが、querystring、session変数、serverを用いることを含むことが予想される.Transferメソッドは,ページ間の値伝達を実現する.
QueryStringを使用してQueryStingを使用してページ間で値を渡すのは古いメカニズムですが、この方法の主な利点は実現が非常に簡単であることですが、ブラウザのアドレスバーに表示される(安全ではありません)値を渡すと同時にオブジェクトを渡すことができませんが、伝達される値が少なく安全性の要求が高くない場合、この方法は良い方法です.この方法を使用する手順は次のとおりです.
1、コントロールを使用してwebフォーム(form)を作成する
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,ボタンまたはリンクボタンのクリックイベントで,セッション変数にコントロールの値を追加する
4,Responseを使用する.Redirectメソッドを別のページにリダイレクト
5.別のページでセッションの値を抽出し、セッションを使用する必要がないと判断した場合、次のコード・スライスを明示的にクリアする方法を示します.
ソースページコード:
 
  
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という方法は、上記の方法に比べて少し複雑ですが、ページ間の値伝達では特に役立ちます.この方法では、別のページでオブジェクト属性で表示された値にアクセスできます.もちろん、この方法では、別のページでアクセスできるように、いくつかの属性を作成するために追加のコードを書く必要がありますが、この方式がもたらすメリットも明らかだ.全体的に,この方法を用いることは簡潔であり,オブジェクト向けである.この方法を使用するプロセス全体は次のとおりです.
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"); } 


ターゲットページコード:
ここにいるよaspxでは必ず最初の文に追加してください
 
  


そしてanotherwebform.aspx.csには以下のように追加されます.
 
  
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;
}


補足:
Response.Redirectによるページジャンプの実装
機能:現在のクライアントブラウザに別のURLページに接続するようリダイレクトします.
構文:Response.Redirect(「文字列」)
説明:文字列はWeb URLで、絶対パスまたは相対パスです.
その重荷重方法Responseに置き換えることもできる.Redirect(「文字列」、false)、trueに設定すると、ページコードがすべて実行されたり、FlushまたはEndメソッドが呼び出されたりした後、サーバはページ実行結果をクライアントに送信します.そうしないと、サーバは実行しながら送信します.ASP3.0以上のバージョンのデフォルト値はtrueです.Windows 2000のIIS 5のデフォルト値もtrueです.
  Response.Redirectというページをジャンプする方法は、2回の再送(postback)を行うため、ジャンプ速度が速くありません.任意のページにジャンプでき、サイトのページ制限はありません(baiduからgoogleにジャンプできます)が、ログイン保護をスキップすることはできません.速度が遅いのが最大の欠陥だ.
そのジャンプメカニズムは、まずサーバ側がhttpリクエストをクライアントに送信し、ジャンプする必要がある新しいページを通知し、クライアントがサーバ側にジャンプリクエストを送信することである.ジャンプ後に内部空間に保存する全てのデータ情報が失われるのでSessionを使用する必要がある.
2.Response.Redirectが新しいウィンドウを開く2つの方法
一般的にはResponse.Redirectメソッドはサーバ側でステアリングを行うため、Responseを使用する.Write("window.location='http://dotnet.aspx.cc';")メソッド以外のメソッドは、指定したURLアドレスを新しいウィンドウで開くことはできません.
しかし、form要素のtargetプロパティを設定することで、新しいウィンドウを開く方法があります.以下に採用できる2つの方法を示します.
方法1:サーバ側でtargetプロパティを設定し、クライアントがスクリプトをサポートしない場合にも最適です.コードは次のとおりです.
 
  

br> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    protected void Page_Load(object sender, EventArgs e)
    {
        form1.Target = "_blank";
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }



    <br/><br/><br/><form id="form1" runat="server"><br/>    <button id="Button1" runat="server" onclick="Button1_Click" text=" Tab "/><br/></form><br/><br/><br/> </code></pre> <br> 2:クライアントスクリプトの でtarget を する.コードは のとおりです.<pre><code> <br/> <p>br> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></p> <p><disable_script runat="server"/></p> <p>    protected void Page_Load(object sender, EventArgs e)<br/>    {<br/>        Button1.Attributes.Add("onclick", "this.form.target='_newName'");<br/>    }</p> <p>    protected void Button1_Click(object sender, EventArgs e)<br/>    {<br/>        Response.Redirect("http://dotnet.aspx.cc");<br/>    }<br/></p> <p><br/></p><br/>    <title/><br/><br/><br/><form id="form1" runat="server"><br/>    <button id="Button1" runat="server" onclick="Button1_Click" text=" Tab "/><br/></form><br/><br/><br/> </code></pre> <br> の2つの のtargetプロパティは、 の な を できますが、 じ のウィンドウが いている は、 しいウィンドウが の のウィンドウで きます.<br> :ポップアップウィンドウの と さを する がある は、 の に できます.<pre><code> <br/><strong> <br/> <br/>br> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <br/> <br/><disable_script runat="server"> <br> <br>    protected void Page_Load(object sender, EventArgs e) <br>    { <br>      string WindowName = "win" + System.DateTime.Now.Ticks.ToString(); <br>      Page.RegisterOnSubmitStatement("js", "window.open('','" + WindowName + "','width=600,height=200')"); <br>        form1.Target = WindowName; <br>    } <br> <br>    protected void Button1_Click(object sender, EventArgs e) <br>    { <br>        Response.Redirect("http://dotnet.aspx.cc"); <br>    } <br></disable_script> <br/> <br/> <br/> <br/>    <title> <br/> <br/> <br/><form id="form1" runat="server"> <br/>    <button id="Button1" runat="server" onclick="Button1_Click" text=" Tab "/> <br/></form> <br/> <br/> <br/></strong> </code></pre> <p>3. Server.Transfer , postback, 。 <br/>Server.Transfer , , url ! , 。 <br/> ,Transfer , true, 。 <br/>Server.Transfer("hyj.aspx"); <br/>// , , hyj.aspx, hyj.aspx 。</p> <p>4.Server.Execute , , postback。 aspx , 。 Server.Execute("hyj.aspx");// , hyj.aspx , hyj.aspx , 。 Execute 。 : asp.net ----Redirect、Transfer、Execute、 、HyperLink 。 , Redirect aspx , html, Redirect url , Redirect, 2 postback, aspx ( ), Transfer aspx aspx Execute。 , 。 , , Web HyperLink , NavigateUrl 。</p> <div class="clearfix"> <span id="art_bot" class="jbTestPos"/> </div> </div> </div> </div>