【问题标题】:ASP.NET MVC 3 Complex Type ValidationASP.NET MVC 3 复杂类型验证
【发布时间】:2026-01-16 05:20:05
【问题描述】:

我有一种情况需要验证孩子,但前提是它存在。基本上用户可以输入银行账户或信用卡,我只想验证他们输入的那个。

以下是模型:

public class AccountViewModel
{        
    [Required]
    public bool isBankAccount { get; set; }

    [RequiredIf("isBankAccount")]
    public BankAccount BankAccount { get; set; }

    [RequiredIf("isBankAccount",
        IfNot = true)]
    public CreditCard CreditCard { get; set; }
}

public class CreditCard
{
    [Required]
    [CreditCard]
    public string CreditCardNumber { get; set; }

    [Required]
    [Range(1, 12)]
    public int? ExpiryMonth { get; set; }

    [Required]
    [Range(2000, 3000)]
    public int? ExpiryYear { get; set; }

    [Required]
    public string CardHolderName { get; set; }
}

public class BankAccount
{
    [Required]
    public string BSB { get; set; }

    [Required]
    [StringLength(10,
        MinimumLength = 3)]
    [NumbersOnly]
    public string AccountNumber { get; set; }

    [Required]
    public string AccountHolderName { get; set; }
}

我的问题是,尽管父属性验证为 true,但子属性仍在验证中。如果父母这么说,有没有办法阻止孩子验证?

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-3 validation


【解决方案1】:

为什么不创建一个属性 PaymentMode ,从 PaymentMode 派生 Bank 和 CC ,将字段设为必填,并在 UI 中处理用户可以选择和输入的内容。

只是一个想法。

【讨论】: