SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ASP.NET MVC 2入門

ASP.NET MVC 2による検証機能

ASP.NET MVC 2入門(中編)


  • X ポスト
  • このエントリーをはてなブックマークに追加

Validation(サーバーサイド・クライアントサイド)

 MVC 1時代の検証は、サーバに一度問い合わせる必要があり、お世辞にも優れているとは言いづらい機能でした。以前の連載では、外部ツールxValを使用することでMVC 1における検証を強化していました。

 MVC 2時代の基本的な入力検証はDataAnnotationの設定により、サーバーサイドとクライアントサイド、それぞれ実施できるようになりました(図1)。

図1 検証ページの検証例
図1 検証ページの検証例
[コラム]xValとの比較

 xValは、MVC 1時代において効果的な検証を実現できましたが、細かな検証ルールの作成が必要でした。MVC 2が標準でサポートするサーバ/クライアントサイドの検証は、より簡易で強力です。DataAnnotationで検証規約を定め、サーバーサイドにリクエスト時、また、クライアントサイドではスクリプトを使用して実行時に検証を実施できます。強力になった検証をフル活用しましょう。

DataAnnotationの理解

 MVC 2の検証を知るためには、DataAnnotationの理解が必要です。ASP.NET MVCと周辺技術の活用テクニックでも触れましたが、今一度、DataAnnotationについて解説します。

DataAnnotationの理解

 System.ComponentModel.DataAnnotations名前空間ASP.NET Dynamic DataでDynamic Dataコントロールの検証を行うために利用された名前空間です。これまで検証ロジックは、コードベースでnullチェックや入力数を確認していましたが、DataAnnotationを利用すると属性宣言だけで、入力検証を簡単に設定できます。

DataAnnotation指定例
// 必須入力チェック
[Required(ErrorMessage="必須入力項目です")]
// 文字数チェック
[StringLength(6, ErrorMessage="メンバIDは6文字以内で入力してください")]

 .NET 3.5ベースでは、Dynamic Dataで主に利用されていましたが、ASP.NET MVCでも応用できます。なお、このDataAnnotationは、WPF4.0や、Silverlightでも利用できます。これからの検証のスタンダードになり得る可能性が非常に高い、注目の名前空間です。

 以下に、利用可能な検証属性を紹介します。

利用可能な検証属性
属性クラス 概要
CustomValidationAttribute .NET 4から提供されている属性で、カスタムメソッドを指定
DataTypeAttribute プロパティにメールアドレスや電話番号など、追加の型を指定
RangeAttribute 値の数値範囲を指定
RegularExpressionAttribute 正規表現を指定
RequiredAttribute 必須項目を指定
StringLengthAttribute 最大文字長を指定

 それでは以上を踏まえて、次ページから実際の検証手順を解説します。

ASP.NET MVC 2におけるValidation

 MVC 2における検証は以下の流れで設定します(図2)。

  1. モデルの作成
  2. DataAnnotationの宣言
  3. サーバ/クライアントサイドの検証機能の有効化
図2 Validation設定の流れ
図2 Validation設定の流れ
モデルの作成

 今回はEntity Data Model(以下、EDM)をモデルとして使用します。EDMの作成手順は次のとおりです。

  1. Pubsデータベースをプロジェクトに追加
  2. ソリューション エクスプローラを展開し、Modelsフォルダ上で[追加]-[新しい項目]を選択
  3. 選択後[新しい項目の追加]ダイアログが表示されるので[データ]テンプレートから「ADO.NET Entity Data Model」を選択し、名前を「Pubs.edmx」と設定後[追加]ボタンをクリック
  4. Entity Data Modelウィザードが起動する。「モデルに含めるコンテンツ」では、[データベースから生成]を選択して[次へ]ボタンをクリック。
  5. 「データ接続の選択」では、Pubsデータベースの接続設定を行い[次へ]ボタンをクリック
  6. 「データベース・オブジェクトの選択」では、[テーブル]-[publishers]にチェックし(publishersテーブル選択)、[完了]ボタンをクリック。

 以上で、EDMが生成されます。ViewやController側で、Modelを利用する際にModelを参照するために、EDM生成後は必ずプロジェクトのビルドを行ってください。Modelの準備は以上です。

DataAnnotationの宣言

 続いて作成したEDMに対してDataAnnotationの宣言を実施します。DataAnnotationの宣言のポイントは以下の2つです。

  • EDMで生成されたエンティティ型のpartialクラスに対して、新たなpartialクラスファイルを作成しメタデータの属性を指定してEDMへの検証属性をリンク
  • リンクさせたエンティティ型へ検証属性を指定

 それでは、実際に属性を指定します。手順は次のとおりです。

  1. Modelsフォルダ上で[追加]-[クラス]を選択
  2. 選択後、テンプレートとして「クラス」を選択した状態で[新しい項目の追加]ダイアログが表示されるので、名前を「publishers_validation.cs」と設定後[追加]ボタンをクリック
  3. 生成されたクラスにPartialクラスと、メタデータの指定、DataAnnotationの属性指定を実施

 記載は次のとおりです。

publishers_validation.csファイルの記載例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace CodeZineMVC2.Models
{
  // モデルクラスに関連付けるメタデータクラスの指定
  [MetadataType(typeof(publishers_validation))]
  public partial class publishers
  { 
  }

  // publishersエンティティ型のプロパティを記載
  public class publishers_validation
  {
    // 必須入力チェック
    [Required(ErrorMessage = "必須項目です")]
    // 表示名指定
    [DisplayName("ID(Pub_ID)")]
    // 値の範囲チェック
    [Range(0,10000, ErrorMessage = "0から10000の間の数字を入力してください。")]
    public string pub_id { get; set; }

    [DisplayName("出版社(Pub_Name)")]
    [Required(ErrorMessage = "出版社名を入力してください。")]
    public string pub_name { get; set; }

    [DisplayName("市町村(City)")]
    public string city { get; set; }

    [DisplayName("都道府県(State)")]
    // 文字数チェック
    [StringLength(2,ErrorMessage="2文字で入力してください。")]
    public string state { get; set; }

    [DisplayName("国")]
    public string country { get; set; }
  }
}

 MetadataType属性は、データモデルクラスに関連付けるメタデータクラスを指定します。今回は、publishers_validationクラスを指定しました。publishers_validationクラスでは、publishersエンティティ型が持つプロパティを記載します。この時、EDM側で実際にどの型が指定されているのか確認して記載します(今回のサンプルは偶然すべてがstring型でした)。

 DisplayName属性は、モデルを型付けしたラベルに表示する文字列を指定します。それ以外に使用する主な属性は前述した「利用可能な検証属性」を参考ください。

 プロパティに応じて必要な属性を指定します。

 DataAnnotationの指定もできました。続いて、サーバ/クライアントサイドの検証機能の有効化を実施します。まずはサーバーサイドからです。

次のページ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ASP.NET MVC 2入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト ナオキ(ナオキ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5316 2010/08/03 13:24

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング