CustomValidatorコントロールによる重複チェック
概要
CustomValidator コントロールを使用し、データベース内のレコードと、フォームの入力が重複しているかをチェックする。
※CustomValidator コントロール: ユーザー定義の入力チェックを行うコントロール。
参照:
元ネタ:
参考:
前提条件
手順
default.aspx を以下のように変更。
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="Form1" runat="server">
ISBNコード:
<asp:TextBox id="code" runat="Server" MaxLength="13" />
<%-- CustomValidator ここから --%>
<asp:CustomValidator id="customValid" runat="Server"
ControlToValidate="code" EnableClientScript="False"
OnServerValidate="customValid_ServerValidate" Display="Dynamic"
ErrorMessage="ISBNコードが重複しています。" />
<%-- CustomValidator ここまで --%>
<br />
タイトル:
<asp:TextBox id="title" runat="Server" MaxLength="100" /><br />
出版社:
<asp:TextBox id="publish" runat="Server" MaxLength="15" /><br />
<asp:Button id="objBtn" runat="Server" Text="登録" OnClick="objBtn_Click" />
</form>
</body>
</html>
default.aspx.vb を以下のように変更。
Imports System.Data
Imports System.Data.SqlClient
Partial Class _Default
Inherits System.Web.UI.Page
Sub customValid_ServerValidate(ByVal sender As Object, ByVal e As ServerValidateEventArgs)
' web.config から接続文字列を取得
Dim str_conn As String
str_conn = System.Configuration.ConfigurationManager. _
ConnectionStrings.Item("masterConnectionString1").ToString()
' ISBNコードをキーにbooksテーブルを検索
Dim objDb As New SqlConnection(str_conn)
Dim objCom As New SqlCommand("SELECT * FROM hoge WHERE code=@code", objDb)
objCom.Parameters.AddWithValue("@code", e.Value)
objDb.Open()
Dim objDr As SqlDataReader = objCom.ExecuteReader()
' レコードを取得できなかったら、データが重複していないので検証は成功
e.IsValid = (Not objDr.HasRows)
objDb.Close()
End Sub
Sub objBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
If Page.IsValid Then
' 検証に成功した場合の処理を記述
End If
End Sub
End Class
実行するとこういう画面が出る。
not found (227.jpg)
ISBNを、既に存在する値と重複させて入力する。
not found (228.jpg)
以下のようなエラーがでる。
not found (229.jpg)