相关疑难解决方法(0)

ASP.NET MVC 3对嵌套对象的验证无法按预期工作 - 验证子对象两次而不是父对象

我试图让ASP.NET MVC 3从复杂的嵌套对象生成表单.我发现有一个验证行为是意外的,我不确定它是否是DefaultModelBinder中的错误.

如果我有两个对象,让我们调用"父"一个"OuterObject",它有一个"InnerObject"类型的属性(子):

    public class OuterObject : IValidatableObject
{
    [Required]
    public string OuterObjectName { get; set; }

    public InnerObject FirstInnerObject { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!string.IsNullOrWhiteSpace(OuterObjectName) && string.Equals(OuterObjectName, "test", StringComparison.CurrentCultureIgnoreCase))
        {
            yield return new ValidationResult("OuterObjectName must not be 'test'", new[] { "OuterObjectName" });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是InnerObject:

    public class InnerObject : IValidatableObject
{
    [Required]
    public string InnerObjectName { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!string.IsNullOrWhiteSpace(InnerObjectName) && string.Equals(InnerObjectName, "test", StringComparison.CurrentCultureIgnoreCase))
        {
            yield …
Run Code Online (Sandbox Code Playgroud)

validation asp.net-mvc defaultmodelbinder asp.net-mvc-3

7
推荐指数
1
解决办法
5786
查看次数

实体框架4.1:覆盖IEnumerable <ValidationResult>验证

    public abstract class Animal , IValidatableObject
    {
        public string Id {get;set;}
        public string Name {get;set;}
        public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (this.Name == "animal")
            {
                yield return new ValidationResult("Invalid Name From base", new[] { "Name" });
            }
        }
    }




    public class Dog: Animal, IValidatableObject
    {
        public string Owner {get;set;}

  public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        /*
          Here call base validate
         */

        if (this.Name == "dog")
        {
            yield return new ValidationResult("Invalid Name From dog", new[] { "Name" });
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-4 entity-framework-4.1

5
推荐指数
1
解决办法
3276
查看次数