asp.netの基本・aspとの違い
ここまでasp
を用いてWEBアプリの基本を説明してきましたが、ここまでのサンプルコードを見てわかるように、asp
はレスポンスするhtml
のレイアウトとサーバ処理が1つのファイルに記載しているため、複雑な画面になってくると、処理を把握するのが大変になってしまいます。
asp
やphp
のようにhtml
の中にサーバ処理のプログラムを記載する方法とは違い、ASP.NET
ではサーバ処理とhtmlレイアウトを別ファイルで管理します。
別ファイルで管理するため、コードが整理され処理を把握しやすくなります。
asp
でsample.asp
というファイルがあったとしたら、ASP.NET
ではhtmlレイアウトを実装するsample.aspx
と、サーバ処理を実装するsample.aspx.vb
(サーバ言語によって拡張子は異なります)の2つのファイルになります。
前回までのasp
の処理をASP.NET
に置き換えたコードは下記のようになります。
※本来は下記のようなやり方はしませんが、説明の都合であえて下記のような方法で実装しています。
sample.aspx(htmlレイアウトのファイル)
<%@ 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;
}
if(document.frmMain.txtPrice.value==''){
alert('単価を入力してください。');
return;
}
document.frmMain.hidMode.value = "1";
document.frmMain.submit();
}
function init(){
if(document.frmMain.hidCheck.value=="1"){
alert("選入力した商品名はすでに登録されています。");
}
}
</script>
</head>
<body onload="init()">
<form id="frmMain" runat="server">
<input type="button" value="登録" onclick="touroku()">
商品名:<input type="text" name="txtName" value="<%= strName %>">
単価:<input type="text" name="txtPrice" value="<%= strPrice %>">
<input type="hidden" name="hidMode" />
<table>
<th>商品名</th>
<th>単価</th>
<%=detail%>
</table>
<input type="hidden" value="<%=hidCheck %>" name="hidCheck" />
</form>
</body>
</html>
sample.aspx.vb(サーバ処理のファイル)
Imports System.Data
Partial Class sample1
Inherits System.Web.UI.Page
'htmlに埋め込む変数
Public detail As String = String.Empty
Public hidCheck As String = String.Empty
Public strName As String = String.Empty
Public strPrice As String = String.Empty
''' <summary>
''' ページロードイベント
''' </summary>
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Request.Form("hidMode") = "1" Then
If checkData() Then 'データチェック
insertData()
Else
hidCheck = "1"
'エラー時は値を保持
strName = Request.Form("strName")
strPrice = Request.Form("strPrice")
End If
End If
Dim dt As DataTable = getData() 'データ取得
dispData(dt) 'データ表示
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)
detail = ""
For Each row As DataRow In dt.Rows
detail &= "<tr><td>" & row("商品名").ToString & "</td><td>" & row("単価").ToString & "</td>" & vbCrLf
Next
End Sub
''' <summary>
''' 登録データをチェック
''' </summary>
Private Function checkData() As Boolean
'データが存在するかどうかチェックする処理は省略します
'すでにデータが登録されていたらtrueを返します
End Function
''' <summary>
''' データ登録
''' </summary>
Private Sub insertData()
'データを登録する処理は省略します
End Sub
End Class
長くなってしまうので、サーバ処理は省略していますが、フォームアプリと同じようなイメージでサーバ処理は実装することができます。
上記のコードではaspxファイルに(htmlレイアウトのファイル)に、まだstrName
やdetail
など、サーバ処理の変数が残っています。
次ページ以降でhtmlレイアウトとサーバ処理を分離して、効率よくASP.NET
を実装していく方法を紹介していきます。