omachizura

ホームページの基本的なことからスタートし、WEBアプリの開発までできるスキルを紹介します。


イベントの基本と注意事項

押下したボタンによってサーバ処理を分岐したい場合(例:登録ボタン、削除ボタン、検索ボタンなど)、いままでの方法では処理区分としてhiddenをsubmitし、処理を分岐していました。

asp.netではsubmitコントロールにrunat="server"属性を指定してsubmitするようにすれば、サーバ処理ではフォームアプリと同じようにイベントのファンクションを定義できます。フォームアプリとは違い、webアプリではサーバ処理を行うたびに画面全体を再描画するため、サーバ処理でのページロードイベントは常に実行されるので注意が必要です。サーバ処理ではポストバック時にはIsPostBackの値がtrueになるので、初期表示時か、ポストバック時かで処理を分岐することができます。ページロードイベントの処理はIsPostBackがfalseのとき(初期表示時のとき)のみ処理を行うようにすれば、フォームアプリと同じようなイメージでサーバ処理を実装することができます。

'ページロード(登録・削除ボタンクリック時でも発生します)
Private Sub Page_Load(ByVal sender As …) Handles MyBase.Load

'登録ボタンクリック
Private Sub btnInsert_Click(ByVal sender As …) Handles btnInsert.Click

'削除ボタンクリック
Private Sub btnDelete_Click(ByVal sender As …) Handles btnDelete.Click

いままでのコードにイベント処理を組み込んだコードは下記のようになります。

sample.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="sample1.aspx.vb" Inherits="sample1" %>

<html>
<head>
    <title>aspを移植</title>
    <script type="text/javascript">
    function touroku(){
      //クライアント側の入力チェック
      if(document.frmMain.txtName.value==''){
        alert('商品名を入力してください。');
        return false;
      }
      if(document.frmMain.txtPrice.value==''){
        alert('単価を入力してください。');
        return false;
      }
      return true;
    }
    function init(){
      if(document.frmMain.hidCheck.value=="1"){
        alert("入力した商品名はすでに登録されています。");
      }
    }
    </script>
</head>
<body onload="init()">
  <form id="frmMain" runat="server">
    <!-- buttonをsubmitコントロールに変更します -->
    <input type="submit" value="登録" onclick="return touroku()" runat="server">
    商品名:<input type="text" name="txtName" id="txtName" runat="server">
    単価:<input type="text" name="txtPrice" id="txtPrice" runat="server">
    <asp:GridView ID="grvDetail" runat="server" AutoGenerateColumns="false">
      <Columns><asp:BoundField DataField="商品名" HeaderText="商品名" /></Columns>
      <Columns><asp:BoundField DataField="単価" HeaderText="単価" /></Columns>
    </asp:GridView>
    <input type="hidden" name="hidCheck" id="hidCheck" runat="server" />
  </form>
</body>
sample.aspx.vb
Imports System.Data

Partial Class sample1
  Inherits System.Web.UI.Page

  ''' <summary>
  ''' ページロードイベント
  ''' </summary>
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '初期表示時のみこのタイミングで処理を行います
    If Not IsPostBack Then
      Dim dt As DataTable = getData() 'データ取得
      dispData(dt) 'データ表示
    End If
  End Sub

  ''' <summary>
  ''' データ取得
  ''' </summary>
  Private Function getData() As DataTable
    Dim dt As DataTable
    'データを取得する処理は省略します
    Return dt
  End Function

  ''' <summary>
  ''' データ表示
  ''' </summary>
  Private Sub dispData(ByVal dt As DataTable)
    grvDetail.DataSource = dt
    grvDetail.DataBind()
  End Sub

  ''' <summary>
  ''' 登録データをチェック
  ''' </summary>
  Private Function checkData() As Boolean
    'データが存在するかどうかチェックする処理は省略します
    'すでにデータが登録されていたらtrueを返します
  End Function

  ''' <summary>
  ''' データ登録
  ''' </summary>
  Private Sub insertData()
    'データを登録する処理は省略します
  End Sub

  ''' <summary>
  ''' 登録ボタン押下イベント
  ''' </summary>
  Private Sub btnTouroku_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTouroku.ServerClick
    If checkData() Then 'データチェック
      insertData()
    Else
      hidCheck.Value = "1"
    End If

    Dim dt As DataTable = getData() 'データ取得
    dispData(dt) 'データ表示
  End Sub
End Class





  • asp.netの基本・aspとの違い

    classic aspとasp.net(aspx)の違いやaspx.netの基本的な考え方ついて説明します。ここまでaspを用いてWEBアプリの基本を説明してきましたが、ここまでのサンプルコードを見て...


  • htmlサーバコントロールの基本

    asp.netのhtmlサーバコントロールの基本の基本的な考え方ついて説明します。htmlサーバコントロールを使えば、サーバ処理でhtmlの要素(コントロール)にアクセスできるようになります。フォーム...


  • webサーバコントロールの基本

    asp.netにはwebサーバコントロールというコントロールが用意されています。webサーバコントロールはhtmlのスタイルや属性を直接編集するわけではなく、サーバ処理ではフォームアプリのように、コン...


  • ポストバックの基本

    asp.netでは保持したいコントロールにrunat="server"属性を指定してsubmitすると、自動的に内部処理でコントロールの値を復元してくれます。基本的にasp.net...


  • イベントの基本と注意事項

    asp.netではsubmitコントロールにrunat="server"属性を指定してsubmitするようにすれば、サーバ処理ではフォームアプリと同じようにイベントのファンクション...


  • repeaterで表示・編集・登録処理 その1

    asp.netのWEBサーバコントロールのrepeaterコントロールを使用し、データの表示・編集・登録処理の流れの実装例を紹介します。具体的には、DBに登録されているデータをrepeaterコントロ...


  • repeaterで表示・編集・登録処理 その2

    aspxファイルに定義したrepeaterの中のコントロールのIDはサーバ処理で使うためのIDであって、レスポンスされるコントロールのIDではありません。なので、ID=txtNameのテキストボックス...


  • repeaterで出力時にjavascriptのイベントを定義する

    apsxファイルに詳細ボタンと、詳細画面を起動するjavascriptのファンクションを定義します。onclick属性(イベント)をaspxに定義してしまうと、引数で必要な行事の情報がわからないので、...


  • repeaterで出力したコントロールにjavascriptでアクセスする

    asp.netのrepeaterで動的に出力したコントロールにjavascriptでアクセスする方法を紹介します。javascriptで要素にアクセスする場合はgetElementById(取得したい...


  • javascriptでtableタグの中のコントロールにアクセスする

    例えばrepeaterで明細の一覧を出力した場合、各行のコントロールのIDは動的に出力されるため、document.getElementById('コントロールID')のようにID...