質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

5971閲覧

ASP.NET ListView(挿入)のテキストボックスの中身をチェックしたい

pinamon

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/06/16 17:41

編集2020/06/16 23:49

前提・実現したいこと

ASP.NET C#でListViewとNorthWind(テーブル:Region)を用いてテーブルの内容を表示し、削除・編集・挿入できるプログラムを作成しています。検証コントロールは使用していません。
テーブルの表示、削除、編集、挿入の実装ができ、それぞれのコマンドを実装する前にメッセージを表示することができました。ですが、挿入のときに、テキストボックスの中身が空だとエラーが発生(error:NULLを挿入できません)しました。
これを、テキストボックスの中身が空のときにエラーをキャッチし、メッセージを表示する方法が分かりません。

なお、削除、編集、挿入は、ListViewのスマートタグから設置しています。

試したこと

以下のようにif文を記述したところ、ClientScript~のところで「到達できないコードが検出されました」と出てしまいました。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default2.aspx.cs" Inherits="****" %> <!DOCTYPE html> <html xmlns="****"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> ASP.NET Do-It-Yourself</div> <hr/> <asp:ListView ID="ListView1" runat="server" DataKeyNames="RegionID" DataSourceID="SqlDataSource1" InsertItemPosition="LastItem"> <AlternatingItemTemplate> <tr style="background-color: #FFFFFF;color: #284775;"> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除"/> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" /> </td> <td> <asp:Label ID="RegionIDLabel" runat="server" Text='<%# Eval("RegionID") %>' /> </td> <td> <asp:Label ID="RegionDescriptionLabel" runat="server" Text='<%# Eval("RegionDescription") %>' /> </td> </tr> </AlternatingItemTemplate> <EditItemTemplate> <tr style="background-color: #999999;"> <td> <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" OnClientClick="return confirm('更新しますか?')"/> <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="キャンセル" /> </td> <td> <asp:Label ID="RegionIDLabel1" runat="server" Text='<%# Eval("RegionID") %>' /> </td> <td> <asp:TextBox ID="RegionDescriptionTextBox" runat="server" Text='<%# Bind("RegionDescription") %>' /> </td> </tr> </EditItemTemplate> <EmptyDataTemplate> <table runat="server" style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;"> <tr> <td>データは返されませんでした。</td> </tr> </table> </EmptyDataTemplate> <InsertItemTemplate> <tr style=""> <td> <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="挿入" OnClientClick="return confirm('挿入しますか?')"/> <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="クリア" OnClientClick="return confirm('クリアしますか?')"/> <%if ("RegionIDTextBox" == "") { ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "alert('入力されていません。');", true); return; } %> </td> <td> <asp:TextBox ID="RegionIDTextBox" runat="server" Text='<%# Bind("RegionID") %>' /> </td> <td> <asp:TextBox ID="RegionDescriptionTextBox" runat="server" Text='<%# Bind("RegionDescription") %>' /> </td> </tr> </InsertItemTemplate> <ItemTemplate> <tr style="background-color: #E0FFFF;color: #333333;"> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除" OnClientClick="return confirm('削除しますか?')"/> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" /> </td> <td> <asp:Label ID="RegionIDLabel" runat="server" Text='<%# Eval("RegionID") %>' /> </td> <td> <asp:Label ID="RegionDescriptionLabel" runat="server" Text='<%# Eval("RegionDescription") %>' /> </td> </tr> </ItemTemplate> <LayoutTemplate> <table runat="server"> <tr runat="server"> <td runat="server"> <table id="itemPlaceholderContainer" runat="server" border="1" style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;font-family: Verdana, Arial, Helvetica, sans-serif;"> <tr runat="server" style="background-color: #E0FFFF;color: #333333;"> <th runat="server"></th> <th runat="server">RegionID</th> <th runat="server">RegionDescription</th> </tr> <tr id="itemPlaceholder" runat="server"> </tr> </table> </td> </tr> <tr runat="server"> <td runat="server" style="text-align: center;background-color: #5D7B9D;font-family: Verdana, Arial, Helvetica, sans-serif;color: #FFFFFF"> <asp:DataPager ID="DataPager1" runat="server"> <Fields> <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" /> </Fields> </asp:DataPager> </td> </tr> </table> </LayoutTemplate> <SelectedItemTemplate> <tr style="background-color: #E2DED6;font-weight: bold;color: #333333;"> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除"/> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" /> </td> <td> <asp:Label ID="RegionIDLabel" runat="server" Text='<%# Eval("RegionID") %>' /> </td> <td> <asp:Label ID="RegionDescriptionLabel" runat="server" Text='<%# Eval("RegionDescription") %>' /> </td> </tr> </SelectedItemTemplate> </asp:ListView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString1 %>" DeleteCommand="DELETE FROM [Region] WHERE [RegionID] = @RegionID" InsertCommand="INSERT INTO [Region] ([RegionID], [RegionDescription]) VALUES (@RegionID, @RegionDescription)" ProviderName="<%$ ConnectionStrings:NorthwindConnectionString1.ProviderName %>" SelectCommand="SELECT [RegionID], [RegionDescription] FROM [Region]" UpdateCommand="UPDATE [Region] SET [RegionDescription] = @RegionDescription WHERE [RegionID] = @RegionID"> <DeleteParameters> <asp:Parameter Name="RegionID" Type="Int32" /> </DeleteParameters> <InsertParameters> <asp:Parameter Name="RegionID" Type="Int32" /> <asp:Parameter Name="RegionDescription" Type="String" /> </InsertParameters> <UpdateParameters> <asp:Parameter Name="RegionDescription" Type="String" /> <asp:Parameter Name="RegionID" Type="Int32" /> </UpdateParameters> </asp:SqlDataSource> </form> </body> </html>

補足情報(FW/ツールのバージョンなど)

SQLserver ASP.NET、C#、Visual Studio2019(16.6.2)、Northwind(テーブル:Region)
.NET Framework(4.8) sqlDataSource

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/16 23:09 編集

ListView のコードを、問題の INSERT 部分だけで良いので、アップしてください。質問にアップしたものが全てで、検証コントロールは使ってないのですか? Northwind のどのテーブルを使っているのですか? データソースコントロールは何を使っていますか? .NET Framework のバージョンはなんでしょう? 以上を質問欄を編集して追記願います。
pinamon

2020/06/16 23:54

コメントありがとうございます。 ご質問を受け、内容を修正いたしました。 ListViewのコードについて コードについては先ほど追記いたしました。検証コントロールは使用していません。 Northwindのテーブルについて Regionを使用しています。 データソースコントロールについて sqlDataSourceを使用しています。 .NET Frameworkのバージョンについて 4.8です。
退会済みユーザー

退会済みユーザー

2020/06/16 23:55

検証コントロールは使ってないとのことですが、それを使う案は質問者さんにとって受け入れられないと言うわけではないですよね? 検証コントロールを使う案を回答に書こうと思ってますが、何か訳があって受け入れられないと言うことですとむだになるのでお聞きしてます。
pinamon

2020/06/17 00:04

検証コントロールというものをこのコメントで初めて知りました。そういったものがあるのですね。受け入れられないものではありません。 現在、MicrosoftのDoItYourselfを使用して研修中だったもので、これからそのコントロールが出てくるのか出てこないのか…いずれにしても、検証コントロールというものを調べてみたいと思います。ありがとうございます。
pinamon

2020/06/17 00:30

申し訳ありません。検証コントロールのControlToValidateに入力する検証先のIDは、ListVewの挿入のためのテキストボックスの場合どのようにしたらよいのでしょうか?
guest

回答1

0

ベストアンサー

検証コントロールを使う案を書きます。ユーザー入力の検証は必須なので必ず検証コントロールを使ってサーバー側でも検証を行うことをお勧めします。

ASP.NET Web Forms アプリに標準で用意されている検証コントロールを使えば、クライアント側での JavaScript / jQuery による検証と、サーバー側での検証の両方が有効になります。

今回の課題「INSERT 時に空白の場合はクライアント側のスクリプトでエラーメッセージを出したい」については RequiredFieldValidator を利用できます。

ツールボックスから RequiredFieldValidator を対象の TextBox の下にドラグ&ドロップして、ControlToValidate プロパティを検証対象の TextBox の ID に設定します。ソース画面で行うのが簡単です。以下の画像を見てください。

イメージ説明

そのうえでアプリを実行して TextBox が空白のまま[挿入]ボタンをクリックするとクライアント側で検証がかかって下の画像のように ErrorMessage プロパティに設定したメッセージが表示されます(画像はデフォルトのままです。もちろん変更可能です)

イメージ説明

上記画像の例はクライアント側での検証が NG となった場合です。その場合[挿入]ボタンによるポストバックはキャンセルされます。

検証コントロールにはいろいろ種類があって、その使い方は深い話になるのですが、とりあえず今回はこのスレッドの課題の対応のみレスします。勉強してみてください。

【追記】

一つ大事なことを書くのを忘れてました。

ASP.NET 4.5 以降、クライアントスクリプトを利用するサーバーコントロールが正しく機能するには、必要なクライアントスクリプトの ScriptManager への登録と、全ページでの ScriptManager の配置が必要です。詳しくは以下の記事を見てください。

ASP.NET 4.5 ScriptManager
http://surferonwww.info/BlogEngine/post/2018/04/23/aspnet-45-scriptmanager.aspx

Visual Studio 2019 の「Web Forms」テンプレートを利用して ASP.NET Web フォームアプリケーションを作成した場合、マスターページを使えばその設定がされた ScriptManager が利用できますので、そうすることをお勧めします。

マスターページを使わない場合、「空」のテンプレートでプロジェクトを作った場合は自力で対応することになります。

投稿2020/06/17 01:15

編集2020/06/17 01:30
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinamon

2020/06/17 01:51

大変参考になりました。 URL先、また自分でも調べながら勉強していきたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問