【ASP.NET MVC】【Razor】【VB】 Razor ~ Validation / 応用編 [3] ~

はじめに

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.vb
Imports 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


関連記事

Razor ~入門編~

http://blogs.yahoo.co.jp/dk521123/35586581.html

Razor ~ Validation / 基本編 [1] ~

http://blogs.yahoo.co.jp/dk521123/35593993.html

Razor ~ Validation / 応用編 [2] ~

http://blogs.yahoo.co.jp/dk521123/35596847.html

Razor ~ Validation / 応用編 [3] ~

http://blogs.yahoo.co.jp/dk521123/35599883.html