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

 

inputタグに属性を追加するための自作属性「HtmlProperties」を作ってみました。

maxlength属性や、onkeyup等のイベントハンドラをメタデータクラスで設定できるようにします。

 

 

こんな感じで使えるようにするのが目標です。

 

なお、作成にあたって以下のサイトが大変参考になりましたm(_ _)m

Kiran Chand’s Blog : Adding html attributes support for Templates – ASP.Net MVC 2.0 Beta:

 

まず、属性クラスの本体を作成します。

 

 

属性の基本クラス Attribute を継承し、HtmlPropertiesAttribute クラスを作成し、
各プロパティにinputタグに設定したい属性を記載します。

ここでは、maxlength,onkeyupを指定しています。

 

次に、HtmlPropertiesAttributeのメタデータ属性追加処理を記述します。

 

DataAnnotationsModelMetadataProvider クラスは規定のMVCフレームワークにおけるメタデータの総締めで、
メタデータを取得する CreateMetadata メソッドの内容を、HtmlAttributet を追加するように書き換えたクラス
MetadataProvider を作成します。

 

上記のクラスを、Global.asaxの中で、以下のようにしてModelMetadataProviders.Currentに指定します。

 

 

次に、ビュー側で属性を埋め込むためのHtmlヘルパーメソッドを作成します。

 

 

メタデータから取得した属性リストと、引数から渡された属性リストを合わせて返却します。

ついでに内部で class 属性も追加していますが、この辺りはお好みで変更して下さい。

 

以下はビュー側の処理です。

 

 

まずEditorFor から対象の画面項目の種類を判別し、カスタムテンプレートを呼び出します。

DataType 属性で Text を指定していれば、View→Shared→EditorTemplatesフォルダ配下の Text.ascx を使用します。

以下はText.ascxの全コードです。

 

 

GetHtmlAttribute によって属性が付加されます。

HtmlProperthisを使いたい画面項目種別(Text や Password 等)ごとに
カスタムテンプレートを作成しなければならないので注意して下さい。

 

なお、検証用の属性を作成したい場合は、デフォルトのMVC2プロジェクトに存在するAccountModel.csの
ValidatePasswordLengthAttributeクラスが参考になるかと思います。

コメントを残す

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

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