ASP.NET

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

基本

ポストバック

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

画面遷移

  • 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");

クッキーの利用

  • クッキーに保存するときは、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プロパティで、クッキーを送信する仮想パスを設定する。
  • クッキーより読み出す場合は、Requestオブジェクトを用いる。
    • クッキーが必ず存在するとは限らないのでnullチェックする。
      例)
      if (Request.Cookies["クッキー名"] != null) {
          // 読み出し処理
          ・・・
      }
  • 連想配列を用いる方法が使いやすい。
    例)
    string value = Request.Cookies["クッキー名"]["key1"];

Session

ASP.NET のセッション状態
http://msdn.microsoft.com/ja-jp/library/87069683(VS.80).aspx

DropDownList

項目を動的に作成

データバインドでお手軽に済ませるのが常套手段ですが、一個一個手作りの項目を作りたいときもあるはず。

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

パラメータ付きデータソースのパラメータを再指定

後から検索条件などを指定しなおしたとき、データソースの再バインドを行う必要がある。

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

TemplateFieldのButtonに押下イベントを割り当てる

  1. GridViewタスクからテンプレートの編集を選択する。
  2. ItemTemplateより、当該ボタンを選択状態にし、プロパティウィンドウを開く。
  3. プロパティウィンドウより、プロパティ表示:動作セクションのCommandNameにボタンを識別する任意の名前を記入する。
  4. GridViewのプロパティウィンドウを開く。
    1. プロパティ表示:データセクションのDataKeyNamesに、行を識別するフィールドを選択設定する。
    2. イベント表示:動作セクションのRowCreatedイベントを追加する。
      表を作成時のイベント、行を作る度にボタンに行の識別子を設定していく処理を記述する。
    3. イベント表示:アクションセクションの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

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

ClientScriptManager

サーバサイドコードから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

  • <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

  • 表を作成するコントロール。
  • 行や桁がややこしい。
// 行オブジェクトを用意する
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
Last-modified: 2009-05-22 (金) 13:36:42 (3621d)