私は現在、ViewModelを次のように設定しています。
public class OurViewModel
{
public OurViewModel() { }
[Required]
public int LeadID { get; set; }
[Required]
public int Rate { get; set; }
[Required]
public bool DepositRequired { get; set; }
[RequiredIfOtherPropertyIsTrue("DepositRequired")]
public BankInfo { get; set; }
}
...この場合、「RequiredIfOtherPropertyIsTrue」は、それが言うことをほぼ実行するバリデーターです。別のプロパティがtrue(この場合、デポジットが必要かどうかを示すブール値)であるかどうかを確認し、BankInfoは別の次のようなモデル:
public class BankInfo
{
public enum AccountTypeEnum
{
CHECKING,
SAVINGS
}
public BankAccountInfo() { }
[DisplayName("Account Number")]
[Required(ErrorMessage = "You must provide a valid bank account number")]
public String AccountNumber { get; set; }
[DisplayName("Bank Routing Number")]
[Required(ErrorMessage = "You must provide a valid routing number")]
[StringLength(9, MinimumLength = 9, ErrorMessage = "Your bank routing number must be exactly 9 digits")]
public String ABANumber { get; set; }
[DisplayName("Bank Account Type")]
[Required]
public AccountTypeEnum AccountType { get; set; }
[DisplayName("Name on Bank Account")]
[Required(ErrorMessage = "You must provide the name on your bank account")]
public String AccountName { get; set; }
}
これで、ViewModelに、DepositRequiredブール値にバインドされたチェックボックスと、BankInfoのカスタムテンプレートを含むEditorForがあります。送信時に、モデルで必要とされていない場合にBankInfoで検証を無効にする方法を理解するのに問題があります(たとえば、ViewModelでプロパティが必要ない場合でも、BankInfoでvalがトリガーされるため、任意のフォーム投稿)。ViewModelバインドでネストされたモデルの検証を処理するための標準的な方法はありますか?