3

新しいメンバーを登録するために、という名前のViewModelがありUserRegisterModelます。このモデルは、ユーザーから2種類のアドレスを取得します。彼HomeAddress必須であり、彼WorkAddressオプションです。アドレスを取得するには、という名前の複合型を使用しますContactEntryModel。ContactEntryModelメンバーを[Required]属性で装飾しました。これにより、自宅と職場の両方のアドレスが自動的に検証されます。

WorkAddressを無視または除外としてマークするソリューションを探しています。これにより、検証属性で装飾されていても、WorkAddressの子プロパティの検証を停止するように検証エンジンに指示します。

public class UserRegisterModel
    {
        [StringLength(50), Required]
        public string FirstName { get; set; }
        [StringLength(50), Required]
        public string LastName { get; set; }
        [StringLength(10), Required]
        public string IdCardNo { get; set; }
        [StringLength(100), Email]
        public string Email { get; set; }

        public ContactEntryModel HomeContact { get; set; }  //Required

        public ContactEntryModel WorkContact { get; set; }  //Optional
     }


   public class ContactEntryModel
    {
        [MaxLength(4), Required]
        public string TelPrefix { get; set; }
        [MaxLength(10), Required]
        public string Tel { get; set; }
        [MaxLength(50), Required]
        public string Province { get; set; }
        [MaxLength(50), Required]
        public string City { get; set; }
        [MaxLength(300), Required]
        public string AddressLine { get; set; }
        [MaxLength(20)]
        public string PostalCode { get; set; }
    }
4

1 に答える 1

0

これを行う最善の方法は、状況に合わせて適切に装飾されたカスタム ビュー モデルを作成することです。

別のバージョンは、モデル バインダーにフィールドを無視するように指示することです (これも検証をスキップします)。Bind 属性を使用してこれを行うことができます。

[Bind(Exclude="WorkAddress")]
public ActionResult DoSomething(UserRegisterModel model)
{
    //controller code here
}
于 2012-06-05T09:16:19.073 に答える