ページ転送&gridviewバインドテクニック


ページ値の伝達方法については,多くの議論が起こっている.本文はasp.Netページ間で値を伝えるテクニック.
AD:
ASP.NETクロスページ値:QueryString変数の使用
QueryStringは非常に簡単な値伝達方式で、ブラウザのアドレスバーに転送された値を表示することができます.この方法は、1つ以上のセキュリティ要件が高くない場合や、構造が簡単な数値を渡す場合に使用できます.しかし配列やオブジェクトを渡すには,この方法は使えない.次に例を示します.
a.aspxのC#コード

    
    
    
    
  1. private void Button1_Click(object sender, System.EventArgs e)
  2. {
  3. string s_url;
  4. s_url = "b.aspx?name=" + Label1.Text;
  5. Response.Redirect(s_url);
  6. }

b.aspxにおけるC#コード

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

ASP.NETクロスページ転送:Applicationオブジェクト変数の使用
Applicationオブジェクトの役割範囲は、グローバル全体、つまりすべてのユーザーに有効です.その一般的な方法はLockとUnLockである.
a.aspxのC#コード

    
    
    
    
  1. private void Button1_Click(object sender, System.EventArgs e)
  2. {
  3. Application["name"] = Label1.Text;
  4. Server.Transfer("b.aspx");
  5. }

b.aspxにおけるC#コード

    
    
    
    
  1. private void Page_Load(object sender, EventArgs e)
  2. {
  3. string name;
  4. Application.Lock();
  5. name = Application["name"].ToString();
  6. Application.UnLock();
  7. }

ASP.NETクロスページ値:Session変数の使用
これはきっと皆さんが使っている中で最も一般的な使い方に違いありません.その操作はApplicationと似ていて、ユーザー個人に作用します.そのため、過剰なストレージはサーバーのメモリリソースの消費を招きます.
a.aspxのC#コード

    
    
    
    
  1. private void Button1_Click(object sender, System.EventArgs e)
  2. {
  3. Session["name"] = Label.Text;
  4. }

b.aspxにおけるC#コード

    
    
    
    
  1. private void Page_Load(object sender, EventArgs e)
  2. {
  3. string name;
  4. name = Session["name"].ToString();
  5. }

ASP.NETクロスページ転送:Cookieオブジェクト変数の使用
これもよく使われる方法で、Sessionと同じように、ユーザー一人一人にとって何なのかということですが、Cookieはクライアントに保存され、sessionはサーバ側に保存されているという本質的な違いがあります.そしてCookieの使用はaspに合わせる.Net内蔵オブジェクトRequestを使用します.
a.aspxのC#コード

    
    
    
    
  1. private void Button1_Click(object sender, System.EventArgs e)
  2. {
  3. HttpCookie cookie_name = new HttpCookie("name");
  4. cookie_name.Value = Label1.Text;
  5. Reponse.AppendCookie(cookie_name);
  6. Server.Transfer("b.aspx");
  7. }

b.aspxにおけるC#コード

    
    
    
    
  1. private void Page_Load(object sender, EventArgs e)
  2. {
  3. string name;
  4. name = Request.Cookie["name"].Value.ToString();
  5. }

ASP.NETクロスページ転送:サーバを使用する.Transferメソッド
これこそ,顔象オブジェクトの開発に用いる手法であり,サーバを用いるといえる.Transferメソッドは,プロセスを現在のページから別のページに導くが,新しいページは前のページの応答フローを用いるため,このメソッドは完全に面象オブジェクトであり,簡潔で有効である.
a.aspxのC#コード

    
    
    
    
  1. public string Name
  2. {
  3. get{ return Label1.Text;}
  4. }
  5. private void Button1_Click(object sender, System.EventArgs e)
  6. {
  7. Server.Transfer("b.aspx");
  8. }

b.aspxにおけるC#コード

    
    
    
    
  1. private void Page_Load(object sender, EventArgs e)
  2. {
  3. a newWeb; // a
  4. newWeb = (source)Context.Handler;
  5. string name;
  6. name = newWeb.Name;
  7. }

以上は私が実践の過程でまとめたaspです.Netページ間で値を伝えるテクニック.
gridviewバインドテクニック
gridviewのバインディングに初めて触れるとき、RowDataBoundというイベントはよく使われるでしょう.このイベントはgridviewの行データが埋め込まれたときにトリガーされ、このイベントでは埋め込まれたばかりの行のコントロールをより多く処理することができます.
バインドするときは、<%@Import namespace=""Systemを参照するに違いありません.Data'%>の後に<%#((DataRowView)Containerを使用します.DataItem)[""xxxx"]%>バインドの方法
パフォーマンスの詳細は考慮しませんが、一般的なアプリケーションでは、データバインド時に目的の効果を実現することができます.
1,特殊値のバインド
多くの場合、データベースからクエリーされた値のバインドを直接ページに表示することはできません.例えば、金額が3000元以上の注文は「大単」、3000元以下の文書は「小単」と表示されます.このとき,データベースクエリの際にSQL文で判断することもできるが,バインド中に判断することもできる.<%#int.Parse(((DataRowView)Container.DataItem)[""Money""].ToString())>3000?「大単」「小単」%>このように、データをバインドするときに、直接表示を「大単」、「小単」の表示に変更します.2、コントロールの表示または非表示を制御します.
コントロールコントロールの表示や非表示を制御することも、バインド時によく遭遇する場合である.同様にバインディング時に実装も可能であり、3000以上の金額の場合はボタンを表示する、そうでない場合はボタン3、フォントの色を制御
さらに条件の違いは、フォントに異なる色を表示させることです.これもバインド時に実現できる機能です.3000以上の金額の場合、「文書の表示」が赤になります.そうしないと、黒
3000?""#ff0000"":""#000000""%>;「」>文書の表示
4、JSのバインド
多くの場合、JSで多くの特効を実現することができるが、gridviewのバインドでは、テンプレート列を使用しても、異なるIDを直接指定することはできないが、データでバインドできる場合も同様である.私たちはデータを埋め込むとき、データの一意の値IDをクエリーし、コントロールにも埋め込みます.では、IDの違いは簡単になります
"""">
このように、各行のdivには異なるidがあり、JSで指定されたJSを見つけることができ、同じ方法でJSのメソッド呼び出しをバインドすることもできます.
このような4つの実用的な応用を紹介したが,最後に,<%>>を用いてサーバ側コードを呼び出し,<%#%>を用いて値を制御したい場所にバインドした.性能の上で私はテストをしたことがありませんが、少なくとも符号化の便利さの上で、私個人はやはり取るべきだと思います.