ASP.NET MVC 2 Templates,Part 2:ModelMetadata[翻訳]

6261 ワード

テキストアドレス


1. ASP.NET MVC 2 Templates,Part 1:Introduction[翻訳]

あなたのモデルを理解する


ModelMetadataは私たちが紹介したMVC 2のクラスの一つです.このクラスは、オブジェクトに表示または編集したい情報について説明するように設計されています.一般的に私たちはテンプレートを書くのに使います.このメタデータは実際にはテンプレートになくても使えます.

What is a Model?


ModelMetadataといえば、「model」の概念は以前よりも少しぼやけている.
上記の記事のモデルを例に挙げます.
public class Contact
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

このモデルのために強いタイプのビューを作成し、このビューでViewDataに入るとします.ModelMetadata属性の場合、このModelはここでContactオブジェクトである.
また、このメタデータオブジェクトにより、属性に関連するすべてのメタデータを取得することもできます.各プロパティに対応する、コレクションのModelMetadataオブジェクトが返されます.Contactオブジェクトでは、FirstName、LastName、Ageに対応する3つの新しいメタデータオブジェクトが得られます.FirstNameのメタデータを例にとると、このモデルタイプはString(containerタイプはContact)である.これにより、オブジェクトのプロパティのレイヤにかかわらず、再帰的に取得できます.

どのようにして(メタデータ)を取得しますか?


現在のモデルの使用


最も一般的な方法で取得するメタデータは、以下に示すように、ViewDataのModelMetadata属性である.このメタデータオブジェクトはViewDataのModelを記述する.オブジェクトのテンプレートをレンダリングする場合、メタデータを取得する最も一般的な方法です.

既存のメタデータのpropertiesプロパティから取得


メタデータ・オブジェクトが手元にある場合は、各モデルに対応するメタデータ・オブジェクトのセットを返すプロパティであるPropertiesプロパティを呼び出すことができます.

式ツリーから取得


ModelMetadataというクラスには2つの静的な方法がある:FromStringExpressionとFromLambdaExpression.この2つの方法は、文字列式(例えば「PropertyName」)またはコード式(例えば「m=>m.PropertyName」)をModelMetadataに変換するために用いる、HTML helpersの大部分はこの2つの方法で書き換えられている.

メタデータには何が入っていますか?


メタデータがどのように構成するかを説明する前に、まずModelMetadataオブジェクトにどのような種類の情報が利用可能であるかを素早く振り返る.

modelとそのコンテナのプロパティ

  • Model and ModelType

  • モデル自身の値とタイプを得る.モデルの値が空である可能性があるにもかかわらず、モデルのタイプを知ることができる(例えば、Lambda式から情報を導くことができる).
  • ContainerType and PropertyName

  • コンテナオブジェクトと属性名、すなわち値のソースが得る、すべてのmodelsがpropertiesから来たわけではないので、空である可能性がある.
  • Properties

  • 既存のオブジェクトのプロパティを記述するModelMetadataオブジェクトのセットを取得

    モデルのメタデータについて

  • ConvertEmptyStringToNull

  • formsをマークするpostedは、サービス側の空白文字列を空に変換する必要があります.デフォルト:true
  • DataTypeName

  • データ型メタ情報として使用する文字列(例えば、この文字列が実際にemailアドレスであることを知らせるため).いくつかの有名なデータ型には「Email」、「Html」、「Password」、「Url」が含まれている.デフォルト:null.
  • Description

  • modelの長いテキストの説明について.デフォルト:null
  • DisplayFormatString

  • テンプレートにmodel値を表示するフォーマットとして使用する文字列.デフォルト:null
  • DisplayName

  • このモデル値の表示名.テンプレートとHtmlで.Label/LabelForではlabelのtextとして使用する.デフォルト:null
  • EditFormatString

  • テンプレートでmodel値を編集するフォーマットとして使用する文字列.デフォルト:null
  • HideSurroundingHtml

  • このフィールドをマークするにはHTMLで囲むべきではありません(例えばlabel).通常、テンプレートが非表示のinputを生成する場合に用いる.デフォルト:null
  • IsComplexType

  • タグシステムが複合型であると認めるかどうか(したがって、文字列のテンプレートではなく複合オブジェクトのテンプレートがデフォルトで選択される).読み取り専用
  • IsNullableValueType

  • このモデルが空のオブジェクトタイプであるかどうかをマークする(すなわち、Nullable).読み取り専用
  • IsReadOnly

  • .読み取り専用
  • IsRequired

  • 必要かどうかデフォルトの空のタイプはtrueで、その他はfalseです.
  • NullDisplayText

  • 空のモデルを表示しようとすると表示される情報.デフォルト:null
  • ShortDisplayName

  • このモデルの短い表示名です.テーブルリストのデータビューのタイトルを表示する.このフィールドが空の場合はDisplayNameを使用します.デフォルト:null
  • ShowForDisplay

  • このモデルはdisplayモデルにあるべきですか(モデルであるべきですか?)に表示されます.デフォルト:true
  • ShowForEdit

  • このモデルはeditモデルにあるべきですか(テンプレートですか?)に表示されます.デフォルト:true
  • SimpleDisplayText

  • Text which should be shown for this model when summarizing what would otherwise be a complex object display. Default: see below
  • TemplateHint

  • どのテンプレートを使用するかを示す文字列として使用される.デフォルト:null
  • Watermark

  • textboxで編集するときに表示される透かし.デフォルト:null

    Helperメソッド:

  • GetDisplayName()

  • この方法はmodelから取得する表示名として用いられる.DisplayNameが空でない場合は、DisplayNameに戻ります.次にPropertyNameを確認し、空の側には戻りません.すべてが空の場合はModelTypeに戻ります.Name.
  • GetValidators()

  • この方法はこのモデルで利用可能なvalidatorsを取得するために使用される.validatorsは、サービス側のmodelの検証としてもよいし、クライアントの検証ルールを生成してもよい.

    SimpleDisplayTextのデフォルト値には、次のルールがあります。


    Modelが空の場合はNull DisplayTextに戻ります.
    もしこのタイプがModelを書き換えたらToString()
    このモデルに属性がない場合はStringを返します.Empty
    Modelの最初の属性が空の場合、この属性のNull DisplayText値を返します.そうでない場合、最初の属性のToString()値を返します.

    ModelMetadataはどこから来ましたか?


    MVC 2は挿入可能なメタデータシステムを追加する.デフォルトのModelMetadataオブジェクトはattributesからデータを取得して構築する、まずSystem.ComponentModelとSystemComponentModel.DataAnnotationsネーミングスペースのattributes.
    デフォルトのDataAnnotationsを使用すると、次のattributesがメタデータに影響します.
  • [HiddenInput] (from System.Web.Mvc)

  • このプロパティを適用すると、modelを編集するときに非表示のinputが生成されます.デフォルトでは、DisplayValueがtrueとしてマークされていない限り、使用する包囲HTMLも非表示になります.この場合、表示値(HTMLを囲む)も非表示inputも生成する.HideSurroundHtmlの設定に加えて、「非表示Input」のTemplateHintを設定することもできます(書き換え[UIHint])
  • [UIHint] (from System.ComponentModel.DataAnnotations)

  • UIで示す名称でTemplateHint属性を設定する.まず「MVC」の外観層タイプを探し、ない場合はemptyまたはnullの外観層を検索する.
  • [DataType] (from System.ComponentModel.DataAnnotations)

  • DataType Nameプロパティの設定
  • [ReadOnly] (from System.ComponentModel)

  • IsReadOnlyプロパティを設定します.クラス記述子(Type descriptors)を使用しているので、public setterがないと自動的に[ReadOnly]attributeがあります.
  • [DisplayFormat] (from System.ComponentModel.DataAnnotations)

  • このattributeでNull DisplayTextを設定するとmodelのメタデータにNull DisplayTextが設定され、DataFormatStringを設定するとdemolのメタデータにDisplayFormatStringが設定され、ApplyFormatInEditModeが同時にtrueに設定されるとmodelのメタデータにEditFormatStringが設定され、ConvertEmptyStringToNullを設定するとmodelのメタデータにConvertEmptyStringToNullが設定されます
  • [ScaffoldColumn] (from System.ComponentModel.DataAnnotations)

  • ShowForDisplayもShowForDisplayも設定
  • [DisplayName] (from System.ComponentModel)

  • DisplayNameプロパティの設定

    締めくくり


    テンプレートを作成するとき、メタデータに関する知識をもっと知っています.次はMVC 2のデフォルトモデルについてお話しし、彼らを書くとします.asaxファイルの場合はどうなりますか.
     
    to be continue….