6

System.ComponentModel.DataAnnotations属性を使用して、検証ルールを使用して他のオブジェクトを含むモデルを検証しようとしています。デフォルトのMVC実装で十分であると期待していました。

var obj = js.Deserialize(json, objectInfo.ObjectType);
if(!TryValidateModel(obj))
{
    // Handle failed model validation.
}

オブジェクトはプリミティブ型で構成されていますが、DataAnnoticationsを使用する他のクラスも含まれています。そのようです:

public class Entry
{
    [Required]
    public Person Subscriber { get; set; }

    [Required]
    public String Company { get; set; }
}

public class Person
{
    public String FirstName { get; set;}

    [Required]
    public String Surname { get; set; }
}

問題は、デジタルで作成された.net / Blog / 54 / deep-inside-asp.net-mvc-2で読み取ることができるように、ASP.NET MVC検証が1レベルしか下がらず、最上位クラスのプロパティのみを評価することです。 -model-metadata-and-validation。

誰かがこれに対するエレガントな解決策を知っていますか?xValを試しましたが、非再帰的なパターンを使用しているようです(http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/)。

誰かが前にこの問題に遭遇したに違いありませんか?Webサービスを設計している場合、モデル内のオブジェクトのネストはそれほど奇妙に見えません。

4

1 に答える 1

1

codeplexからFluentValidationを調べることをお勧めします。検証ルールは別のクラスに含まれています(NHibernateおよびFluent NHibernateの動作と同様)。ラムダを使用して検証するプロパティを指定し、子プロパティをサポートします。

`

public class MaintainCompanyViewModelValidator : AbstractValidator<MaintainCompanyViewModel>
    {
        public MaintainCompanyViewModelValidator()
        {
            RuleFor(model => model.Company.ShortName)
                .NotEmpty();
        }

`

于 2010-06-16T04:06:39.567 に答える