表示・検証を行うメタデータクラス作成

 

画面項目の表示形式や、入力検証を一元化して定義するためのメタデータクラスを考えてみました。

 

今回使用した画面表示の元となるUserInfoテーブルの定義は以下の通りです。

 

 

上記のUserInfoテーブルを取り込んだモデルクラスを生成し、

次にメタデータクラスを作成します。

 

 

ここではモデルクラスの部分クラス UserInfo を宣言し、メタデータクラス UserInfoMetaData を関連付けています。

 

入力画面のビューの処理は以下のように記述します。

 

 

必要なのはこれだけです。

EditorForメソッドは、メタデータクラスで定義された各プロパティの属性値を解析し、テキストボックスやテキストエリア等のinputタグを適切に配置する機能を備えています。

ちなみに、表示画面を作りたい場合は DisplayForメソッドを使用します。

 

表示は以下の通りです。

 

 

ラベル、入力タグが自動生成されています。

 

また、入力検証も働いています。

エラーが出るような値を入力すると、、、

 

 

エラーメッセージ出力用のタグも自動で埋め込まれます。

 

このように、画面定義で使用したい値や、入力チェックに使用したい値をメタデータクラスに定義することができます。

 

以下に、メタデータクラスで使用する属性を簡単に紹介いたします。

 

・DisplayName

画面に表示する項目の名称です。

EditorForやDisplayForを実行すると、この属性値が入ったラベルが自動的に作成されます。

 

・ScaffoldColumn

画面に項目を表示するかどうかを設定します。

「true」で表示(デフォルト)、「false」で非表示となります。

 

・Required

必須入力チェックを設定します。

 

・StringLength

入力における最大桁数チェックを設定します。

 

・RegularExpression

正規表現によるチェックを設定します。

 

ちなみに、自分でエラーメッセージを設定したい場合は以下のようになります。

 

 

{0}はDisplayName属性の値です。

StringLengthの{1}には桁数が入っています。

 

・DataType

画面項目の種別を定義しています。

この値から、EditorForはテキストボックス、パスワード、テキストエリア等を判断します。

 

・HtmlProperties

maxlength等のinputタグの属性をここで定義します。

これは自作属性なのでデフォルトでは存在しません。

以下に作成手順と参考サイトを記事にしました。

inputタグに属性を埋め込むメタデータクラス用属性作成

 

・UIHint

表示する際に使用するテンプレートファイル(~.ascx)を設定します。

テンプレートファイルは、Views→自分のコントローラ(ファイルが無い場合はShared)フォルダ配下にある

  • EditorTemplates フォルダ(EditorForから呼ばれる)
  • DisplayTemplates フォルダ(DisplayForから呼ばれる)

の中から検索します。

 

例えば、UIHint(“Pref”)の属性がついた項目を EditorFor で表示しようとすると、以下の都道府県リストボックス作成用の記述がされたテンプレートファイルが呼ばれます。

~ViewSharedEditorTemplatesPref.ascx

 

記述内容は以下のような感じです。

 

テンプレートファイルは、モデルまたは項目種別ごとにまとめることが可能です。

時間があるときにまとめて記事にしたいと思います。。

 

上記以外にも属性はいろいろあるのですが、以下のサイトが参考になると思いますm(_ _)m

まなBlog | メタデータ・クラス

 

余談ですが、上記のようなメタデータクラスを本格的に作成しようとしたきっかけは、
inputタグのmaxlengthをビューに記載したくなかったという思いが強いからです。
ビュー側ではスタイル、デザイン等の記述にとどめたかったので。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください