ホーム > Silverlight, WCF RIA Services > WCF RIA Services:データ検証

WCF RIA Services:データ検証

WCF RIA Servicesでは、必須項目/範囲チェック/正規表現チェックといったデータの検証はメタデータクラスに属性を設定するだけで可能になります。
DomainServiceクラスを追加した際、同時に作成されるメタデータクラスに下記のように属性を設定してみます。

———————————————————————————————–
[MetadataTypeAttribute(typeof(Person.PersonMetadata))]
public partial class Person
{

    internal sealed class PersonMetadata
    {

        private PersonMetadata()
        {
        }

        [Display(Name = "年齢", Order = 2)]
        [Range(0, 120, ErrorMessage = "年齢に誤りがあります")]
        public int age { get; set; }

        [Display(Name="ユーザID", Order=0)]
        public int id { get; set; }

        [Display(Name = "メールアドレス", Order = 3)]
        [RegularExpression(@"\w+([-+.’]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "正しいメールアドレスを入力してください")]
        public string mail { get; set; }

        [Display(Name = "備考", Order = 4)]
        public string memo { get; set; }

        [Display(Name = "名前", Order = 1)]
        [Required(ErrorMessage = "名前は必須項目です")]
        public string name { get; set; }
    }
}
———————————————————————————————–

この変更を行って実行すると、下記のようにデータの検証が行われます。

 image

このとき「更新」ボタンが有効になっています。
で、このまま押してみると、、、画面が真っ白になってエラーとなってしまいます。
ただ、これはデバッグ実行をしているときのエラー制御が通常実行時と異なるために発生する現象のようです。
Ctrl+F5 を押して、デバッグなしで実行すると、「更新」ボタンを押しても何も起きないことを確認することができます。

さて、カスタムのデータ検証も追加してみましょう。そのためには、まずカスタム検証のメソッドを追加するクラスを作成します。
PersonCheck.shared.csというようにクラス名にsharedという名前を追加したファイルを作成します。
このようにファイル名にsharedをつけることで、クライアント側に自動的にこのファイルが追加されるようになります。
ファイルの中は下記のように記述します。

———————————————————————————————–
using System.ComponentModel.DataAnnotations;

namespace SilverlightApplication10.Web
{
    public class PersonCheck
    {
        public static ValidationResult CheckAge_Mail(Person p)
        {
            if (p.age >= 20 && p.mail == string.Empty)
                return new ValidationResult("成人はメールアドレス必須です");
            return ValidationResult.Success;
        }

    }
}
———————————————————————————————–

メタデータクラスのPersonMetadataクラスにこのカスタム検証を使用するよう、以下の属性を追加します。

[MetadataTypeAttribute(typeof(Person.PersonMetadata))]

これで、年齢が20歳以上の場合でメールアドレスの入力がない場合にエラーが表示されるようになります。

 image_3

カテゴリー:Silverlight, WCF RIA Services
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。