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にリダイレクト
下
ターゲットページコード:
のコード断片は、この方法を実装する方法を示しています:ソースページコード:
Session変数を使用してSession変数を使用することは、ページ間で値を伝達する別の方法であり、この例ではコントロールの値をSession変数に存在させ、別のページで使用して、異なるページ間で値伝達の目的を実現します.ただし、Session変数にデータを格納しすぎるとサーバリソースが消費されるので注意が必要です.sessionを使用する場合は慎重にしてください.もちろん、不要なsessionを除去するためにクリーンアップアクションを使用して、リソースの無駄な消費を低減する必要があります.Session変数を使用して値を渡す一般的な手順は、次のとおりです.
1、ページに必要なコントロールを追加
2.フォームに戻るボタンとリンクボタンを作成する
3,ボタンまたはリンクボタンのクリックイベントで,セッション変数にコントロールの値を追加する
4,Responseを使用する.Redirectメソッドを別のページにリダイレクト
5.別のページでセッションの値を抽出し、セッションを使用する必要がないと判断した場合、次のコード・スライスを明示的にクリアする方法を示します.
ソースページコード:
ターゲットページコード:
Server.Transferという方法は、上記の方法に比べて少し複雑ですが、ページ間の値伝達では特に役立ちます.この方法では、別のページでオブジェクト属性で表示された値にアクセスできます.もちろん、この方法では、別のページでアクセスできるように、いくつかの属性を作成するために追加のコードを書く必要がありますが、この方式がもたらすメリットも明らかだ.全体的に,この方法を用いることは簡潔であり,オブジェクト向けである.この方法を使用するプロセス全体は次のとおりです.
1、ページに必要なコントロールを追加
2,戻り値を作成するGet属性プロセス
3.フォームに戻るボタンとリンクボタンを作成する
4ボタンクリックイベントハンドラでサーバを呼び出す.Transferメソッド指定したページに移動
5,2ページ目でContextを使用することができます.Handlerプロパティは、前のページインスタンスオブジェクトの参照を取得します.これにより、前のページにアクセスするコントロールの値を使用して、次のコードを統合して、上記の手順のコードを実現できます.
ソースページコード:次のコードをページに追加します.
サーバを呼び出します.Transferメソッド
ターゲットページコード:
ここにいるよaspxでは必ず最初の文に追加してください
そしてanotherwebform.aspx.csには以下のように追加されます.
補足:
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プロパティを設定し、クライアントがスクリプトをサポートしない場合にも最適です.コードは次のとおりです.
2:クライアントスクリプトの でtarget を する.コードは のとおりです.
の2つの のtargetプロパティは、 の な を できますが、 じ のウィンドウが いている は、 しいウィンドウが の のウィンドウで きます.
:ポップアップウィンドウの と さを する がある は、 の に できます.
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");
}
2:クライアントスクリプトの でtarget を する.コードは のとおりです.
br> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
protected void Page_Load(object sender, EventArgs e)
{
Button1.Attributes.Add("onclick", "this.form.target='_newName'");
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("http://dotnet.aspx.cc");
}
の2つの のtargetプロパティは、 の な を できますが、 じ のウィンドウが いている は、 しいウィンドウが の のウィンドウで きます.
:ポップアップウィンドウの と さを する がある は、 の に できます.
br> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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>
<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>