18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ASP.NET CoreのDataAnotation

Last updated at Posted at 2020-01-15

モデル値の検証に関する属性

StringLength 属性

[StringLength(50, ErrorMessage = "50文字以内で入力してください")]

StringLength 属性は、データフィールドで使用できる最小文字長と最大文字長を指定します。上の例では、使用可能な文字数が 50 文字以下に制限されます。

ErrorMessageプロパティは、これ以外の検証属性でも利用できますが、これ以降は省略します。

以下のようにのように、MinimumLength を指定することで、文字列の最小長を設定することもできます。ただし、Required 属性も指定しないと、空文字を制限することはできません。

[StringLength(50, MinimumLength=2)]

RegularExpression 属性

[RegularExpression(@"^[A-Z][a-zA-Z0-9]+$")]

RegularExpression 属性は、正規表現を使った入力検証を行うことができます。

Required 属性

[Required]

Required 属性は、必須フィールドを示す属性です。参照型のプロパティに指定します。
値型 (例: DateTime、int、double) などの null 非許容型では、Required 属性は必要ありません。 自動的に必須フィールドとして扱われます。

以下のようにすることで、null は非許容だけど、空文字列をデータベースに入れることができます。

[Required(AllowEmptyStrings = true)] 

Range 属性

[Range(0, 5)]

持ちうる値の範囲を指定します。double型を指定することも可能です。

また、以下のようにすれば、日付の範囲を指定することも可能です。

[Range(typeof(DateTime), "1/2/2004", "3/4/2004",

Compare 属性

[Compare("Password", ErrorMessage = "パスワードが一致しません")]
public string PasswordConfirm { get; set; }

2つのプロパティが一致するかを検証します。上の例は、PasswordConfirmプロパティの値とPasswordプロパティの値が一致する必要があります。

EmailAddress 属性

[EmailAddress]

電子メール アドレスであるかを検証します。

Phone 属性

[Phone]

電話番号であるかを検証します。

CreditCard 属性

[CreditCard]

クレジットカード番号であるかを検証します。

表示/入力に関する属性

Display 属性

[Display(Name = "Last Name")]

Display属性は、ラベルのキャプションを指定する際に利用します。

DisplayFormat 属性

DisplayFormat属性は、書式を明示的に指定するために使用されます。

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

ApplyFormatInEditMode オプションは、書式設定を編集 UI にも適用する必要があることを指定します。

DisplayFormat 属性は単独で使用できます。 一般的には、DataType 属性を DisplayFormat 属性と一緒に使用することが推奨されています。

以下のように書けば、nullの時に表示する値を指定できます。

[DisplayFormat(NullDisplayText = "未指定")]

次の例は、空の文字列値を null 値に変換せずに、空文字のまま扱うことを指定します。

[DisplayFormat(ConvertEmptyStringToNull = false)] 

DataType 属性

DataType 属性は、ビューエンジンに対して、データの書式設定のヒントを提供します。プロパティの型よりも詳しい型を指定したいときに利用します。検証は行われませんが、HTML5の機能により、結果的に検証と同等の働きが組み込まれることがあります。

[DataType(DataType.Date)]

DataType 属性は、HTML 5 の data- (データ ダッシュと読みます) 属性が出力されます。 DataType 属性では検証は提供されません。

DataType 列挙型は、Date、Time、PhoneNumber、Currency、EmailAddress など、多くのデータ型のために用意されています。

次のような書けば、パスワードを入力するフィールドであることを指定できます。この場合は、入力タグヘルパーにより、type="password" 属性が付加されます。

[DataType(DataType.Password)]

HiddenInput属性

隠しフィールドであることを示します。入力タグヘルパーにより、type="hidden"がinput要素に付加されます。

[HiddenInput]

データベースに関する属性

Column 属性

[Column("FirstName")]
public string FirstMidName { get; set; }

このように書けば、テーブルのカラム名をプロパティ名とは別のものに変更できる。

以下のように、データベースのカラムの詳細な型を指定することもできます。

[Column(TypeName = "decimal(18, 2)")]

Key 属性

[Key]

[Key] 属性は、プロパティ名が <classname>IdId 以外の時に、そのプロパティが主キー (PK) であることを示すために使用します。

DatabaseGenerated 属性

[DatabaseGenerated(DatabaseGeneratedOption.None)] 

上のコードはPKの値をデータベースで自動生成するのではなく、アプリケーション側で指定することを示します。

TimeStamp 属性

[Timestamp]
public byte[] RowVersion { get; set; }

オプティミスティック コンカレンシーのチェックに利用されるフィールドであることを示します。
SQL Serverでは、rowversion型が割り当てられます。

属性に関するその他の情報

以下のように、複数の属性を 1行に配置することができます。

[DataType(DataType.Date),Display(Name = "Hire Date"),DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
18
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?