はじめに
http://blogs.yahoo.co.jp/dk521123/35596847.htmlの [2] を扱う # [2] 複数プロパティをまたがった検証を行う
ポイント
=> IValidatableObject インターフェースを継承することにより、複数プロパティをまたがった検証を実装する (IValidatableObject インターフェースは、ASP.NET MVC 3から) # 結構簡単に理解できる
サンプル
http://blogs.yahoo.co.jp/dk521123/35596847.htmlのサンプルをベースに作成 # コントローラ、ビューに変更はないので省略。
■ モデル
* PersonModel.vbImports System.ComponentModel.DataAnnotations Imports System.Web.Mvc Namespace Models Public Class PersonModel : Implements IValidatableObject Private Property _Id As Long Private Property _Name As String Private Property _Gender As Gender <ComponentModel.DisplayName("ID")> <ComponentModel.DataAnnotations.Required(ErrorMessage:="{0}は必須です。")> <ComponentModel.DataAnnotations.Range(100, 10000, ErrorMessage:="{0}は{1}~{2}の間で入力してください。")> Public Property Id As Long Get Return Me._Id End Get Set(ByVal value As Long) Me._Id = value End Set End Property <ComponentModel.DisplayName("名前")> <ComponentModel.DataAnnotations.Required(ErrorMessage:="{0}は必須です。")> <ComponentModel.DataAnnotations.StringLength(100, ErrorMessage:="{0}は{1}文字以内で入力してください。")> Public Property Name As String Get Return Me._Name End Get Set(ByVal value As String) Me._Name = value End Set End Property <NoneValidation("None")> Public Property Gender As Gender Get Return Me._Gender End Get Set(ByVal value As Gender) Me._Gender = value End Set End Property ' ★ここに注目★ Public Function Validate(validationContext As ValidationContext) As IEnumerable(Of ValidationResult) Implements IValidatableObject.Validate Dim list = New List(Of ValidationResult)() If "Mike".Equals(Me._Name) AndAlso Gender.Woman.Equals(Me._Gender) Then list.Add(New ValidationResult( "Mikeで女って...", New String() {"Name"})) End If Return list End Function End Class Public Enum Gender None Man Woman End Enum End Namespace
参考文献
[2] 複数プロパティをまたがった検証を行うhttp://blog.shibayan.jp/entry/20110105/1294155788
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_05/aspnetmvc3_05_03.html
http://codezine.jp/article/detail/5658
https://blogonos.wordpress.com/2011/06/17/