gpt4 book ai didi

asp.net-mvc-3 - EditorTemplate 的嵌套模型的 ASP.NET MVC3 条件验证

转载 作者:行者123 更新时间:2023-12-01 10:08:31 25 4
gpt4 key购买 nike

假设您有一个 viewModel:

public class CreatePersonViewModel
{
[Required]
public bool HasDeliveryAddress {get;set;}

// Should only be validated when HasDeliveryAddress is true
[RequiredIf("HasDeliveryAddress", true)]
public Address Address { get; set; }
}

模型 Address 将如下所示:

public class Address : IValidatableObject
{
[Required]
public string City { get; set; }
[Required]
public string HouseNr { get; set; }
[Required]
public string CountryCode { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string ZipCode { get; set; }
[Required]
public string Street { get; set; }

#region IValidatableObject Members

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
string[] requiredFields;
var results = new List<ValidationResult>();

// some custom validations here (I removed them to keep it simple)

return results;
}

#endregion
}

有些人会建议为 Address 创建一个 View 模型并在其中添加一些自定义逻辑,但我需要一个 Address 实例来传递到我的 Address EditorTemplate。

这里的主要问题是 Address 的验证是在我的 PersonViewModel 验证之前完成的,所以我无法阻止它。

注意:RequiredIfAttribute 是一个自定义属性,它可以满足我对简单类型的要求。

最佳答案

如果你使用了 FluentValidation.NET 就小菜一碟了而不是在复杂场景中限制验证能力的 DataAnnotations 或 IValidatableObject:

public class CreatePersonViewModelValidator : AbstractValidator<CreatePersonViewModel>
{
public CreatePersonViewModelValidator()
{
RuleFor(x => x.Address)
.SetValidator(new AddressValidator())
.When(x => x.HasDeliveryAddress);
}
}

关于asp.net-mvc-3 - EditorTemplate 的嵌套模型的 ASP.NET MVC3 条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com