*ASP.NET [#ra067a93]
-.NET1.1と2.0、両方の開発環境がある場合、IISでASP.NET設定でどちらのフレームワークを使用するか適切に選択しておかないと、VisualStudioからのデバッグが失敗する。

#contents();

**基本 [#o2b775bd]
***ポストバック [#c221eb49]
-ボタン押下などのイベント処理を行う場合など必ず同じページを読み直す。
-他のページへの遷移が必要な場合は、イベント処理内に別ページへ遷移するを記述する。
--Server.Transferが一般的。
-初回に開く場合は、IsPostBack = False。イベント処理のためのページ読み直し時は、IsPostBack = Trueとなる。

***画面遷移 [#e849f6c2]
-Server.Transferメソッドを使う方法
--サーバ内で指定ページへ処理が移行される。
--遷移元で入力した情報を引き継ぐことが出来る。
 例)
 Server.Transfer("bbb.aspx");

--遷移先から遷移元の情報(オブジェクト)を参照する場合は、@Referenceディレクティブを用いる。
---遷移元ページ(ClassNameプロパティにクラス名を指定)
 例)
 <%@ Page Language="C#" ClassName="SamplePageA" %>
 …… 

---遷移先ページ
 例)遷移元がaaa.aspxの場合
 <%@ Page Language="C#" %>
 <%@ Reference Page="aaa.aspx" %>
 …… 

--このようにしておくことで、Context.Handlerプロパティにより遷移元オブジェクトの参照が出来る。
 例)
 if (!IsPostBack) {
     if (Context.Handler is SamplePageA) {
         SamplePageA obj = (SamplePageA)Context.Handler;
         string text = obj.tbxName.Text;
         ……
     }
 }

-Response.Redirectメソッドを使う方法
--Locationヘッダを変更し、ブラウザに任意のページへのリダイレクトを行わせる。
--新しいページを開きなおすことになるので、遷移元で入力された情報は遷移先で受け取ることは出来ない。
 例)
 Response.Redirect("bbb.aspx");

***クッキーの利用 [#h38581e4]
-クッキーに保存するときは、Responseオブジェクトを用いる。
--値の保存は連想配列を用いる方法と、コンテンツを直接代入する方法がある。
 書式1)
 Response.Cookies["クッキー名"]["key1"] = "AAA";
 Response.Cookies["クッキー名"]["key2"] = "BBB";
 
 書式2)
 Response.Cookies["クッキー名"].Value = "key1=AAA&key2=BBB";

--期限の設定は、Expiresプロパティに期限日を設定する。
 例)30日後に設定する場合
 Response.Cookies["クッキー名"].Expires = DateTime.Today.AddDays(30d);

--SecureプロパティをTrueにするとSSL通信でのみ有効なクッキーになる。
 例)
 Response.Cookies["クッキー名"].Secure = true;

--Domainプロパティで、クッキーを関連付けるドメインを設定する。
--Pathプロパティで、クッキーを送信する仮想パスを設定する。
---http://www.microsoft.com/asp で有効なクッキーの場合は、Domainは"www.microsoft.com"、Pathプロパティは"/asp"となる。

-クッキーより読み出す場合は、Requestオブジェクトを用いる。
--クッキーが必ず存在するとは限らないのでnullチェックする。
 例)
 if (Request.Cookies["クッキー名"] != null) {
     // 読み出し処理
     ・・・
 }

--連想配列を用いる方法が使いやすい。
 例)
 string value = Request.Cookies["クッキー名"]["key1"];


***Session [#k8debe1c]
:ASP.NET のセッション状態|http://msdn.microsoft.com/ja-jp/library/87069683(VS.80).aspx


**DropDownList [#ma4223ff]
***項目を動的に作成 [#mc9806f8]
データバインドでお手軽に済ませるのが常套手段ですが、一個一個手作りの項目を作りたいときもあるはず。

 DropDownList1.Items.Clear();   // 全削除
 for (int i = 0; i < 10; i++)
 {
     string key = i.ToString();
     string value = String.Format("項目<{0}>", i);
     DropDownList1.Items.Add(new ListItem(value, ,key));
 }

**GridView [#e7a1b914]
***パラメータ付きデータソースのパラメータを再指定 [#b857bdba]
後から検索条件などを指定しなおしたとき、データソースの再バインドを行う必要がある。

 ObjectDataSource1.SelectParameters["ID"].DefaultValue = param;
 ObjectDataSource1.DataBind();

***TemplateFieldのButtonに押下イベントを割り当てる [#t9a2ad27]
+GridViewタスクからテンプレートの編集を選択する。
+ItemTemplateより、当該ボタンを選択状態にし、プロパティウィンドウを開く。
+プロパティウィンドウより、プロパティ表示:''動作''セクションのCommandNameにボタンを識別する任意の名前を記入する。
+GridViewのプロパティウィンドウを開く。
++プロパティ表示:''データ''セクションのDataKeyNamesに、行を識別するフィールドを選択設定する。
++イベント表示:''動作''セクションのRowCreatedイベントを追加する。~
表を作成時のイベント、行を作る度にボタンに行の識別子を設定していく処理を記述する。
++イベント表示:''アクション''セクションのRowCommandイベントを追加する。~
ボタン押下時のイベント、上で設定した識別子を利用して任意の処理を記述する。

 protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
 {
     if (e.CommandName == "ボタンを識別する任意の名前")
     {
         // 行の識別子を取得
         int idx = Convert.ToInt32(e.CommandArgument);
 
         // 処理
 
     }
 }


 protected void GridView_RowCreated(object sender, GridViewRowEventArgs e)
 {
     // データ行のみを対象とする
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
         // ボタンオブジェクトのインスタンスを得る
         Button btn = (Button)e.Row.FindControl("Button1");
         
         // 行番号を識別子として設定する
         btn.CommandArgument = e.Row.RowIndex.ToString();
     }
 }

:.NET Framework クラス ライブラリ GridView..::.RowCommand イベント|http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.rowcommand.aspx
:GridViewのボタンを押下された行の番号を取得するには?|http://dobon.net/vb/bbs/log3-29/17365.html
:GridView TemplateFieldのButtonのコーディング|http://vsug.jp/tabid/63/forumid/47/postid/5844/view/topic/Default.aspx

***資料URL [#kbb9d1a7]
:連載:VS 2005でいってみようDBプログラミング 第4回 テンプレート機能でGridViewコントロールも自由自在|http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_04/vs2005db_04_03.html

**ClientScriptManager [#xaef6215]
:サーバサイドコードからJavaScriptを埋め込む|http://www.vacant-eyes.jp/tips/taspnet/020.aspx
:ClientScriptManager クラス|http://msdn.microsoft.com/ja-jp/library/system.web.ui.clientscriptmanager(VS.80).aspx
:ASP.NET Web ページにクライアント スクリプトを動的に追加する|http://msdn.microsoft.com/ja-jp/library/ms178207(VS.80).aspx

**HyperLink [#kf5fb11a]
-<a href="...">xxx</a> に相当するコントロール。
-ソースと出力結果の例。

 HyperLink hl = new HyperLink();
 hl.Text = "xxx";
 hl.NavigateURL = "http://www.yahoo.co.jp";
 hl.Target = "_blank";
 hl.Attributes["OnClick"] = "return confirm('飛んじゃう?');";

 <a OnClick="return confirm('飛んじゃう??');" href="http://www.yahoo.co.jp" target="_blank">xxx</a>

**Table [#p8da88bc]
-表を作成するコントロール。
-行や桁がややこしい。

 // 行オブジェクトを用意する
 TableRow row = new TableRow();
 // セルオブジェクトを用意する
 TableCell cell1 = new TableCell();
 // 静的文字列をセルに含める
 cell1.Controls.Add(new LiteralControl("静的文字列"));
 // 用意したセルを行オブジェクトに追加
 row.Cells.Add(cell1);
 
 // セルオブジェクトを用意する
 TableCell cell2 = new TableCell();
 // ハイパーリンクコントロールを用意しセルに含める
 HyperLink hl = new HyperLink();
 hl.Text = "xxx";
 hl.NavigateURL = "http://www.yahoo.co.jp";
 hl.Target = "_blank";
 hl.Attributes["OnClick"] = "return confirm('飛んじゃう?');";
 cell2.Controls.Add(hl);
 // 用意したセルを行オブジェクトに追加
 row.Cells.Add(cell1);
 
 // テーブルオブジェクトに行オブジェクトを追加する
 Table1.Rows.Add(row);

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS