.net 基于模型的mvc4条件数据标注验证

.net 基于模型的mvc4条件数据标注验证,.net,asp.net-mvc-4,c#-4.0,asp.net-mvc-5,asp.net-core-mvc,.net,Asp.net Mvc 4,C# 4.0,Asp.net Mvc 5,Asp.net Core Mvc,我有一个嵌套的PersonalAddress视图模型。对于CommAddress和PermanentAddress,所有属性都是必需的 在mvc4视图中,我对通信地址和永久地址都使用addressDetails模型。但是对于永久地址,所有属性都不是必需的。如果是永久地址,我如何使这些必需的属性成为可选的 public class AddressDetails { [Required(ErrorMessage="Error Message...")] public string

我有一个嵌套的PersonalAddress视图模型。对于CommAddress和PermanentAddress,所有属性都是必需的

在mvc4视图中,我对通信地址和永久地址都使用addressDetails模型。但是对于永久地址,所有属性都不是必需的。如果是永久地址,我如何使这些必需的属性成为可选的

 public class AddressDetails
{
    [Required(ErrorMessage="Error Message...")]
    public string Road { get; set; }

    [Required(ErrorMessage = "Error Message...")]
    public string Sector { get; set; }

    [Required(ErrorMessage = "Error Message...")]
    public string City { get; set; }

    [Required(ErrorMessage = "Error Message...")]
    public string Country { get; set; }
}

public class PersonalAddress
{

    public AddressDetails CommAddress { get; set; }

    public AddressDetails PermanentAddress { get; set; }
}

任何帮助都将不胜感激。

这对你有意义吗

public class AddressDetails
{
    public string Road { get; set; }
    public string Sector { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

[MetadataType(typeof(ReqAddressDetailsMetadata))]
public class ReqAddressDetail : AddressDetails
{
    public class ReqAddressDetailsMetadata
    {
        [Required(ErrorMessage = "Error Message...")]
        public string Road { get; set; }

        [Required(ErrorMessage = "Error Message...")]
        public string Sector { get; set; }

        [Required(ErrorMessage = "Error Message...")]
        public string City { get; set; }

        [Required(ErrorMessage = "Error Message...")]
        public string Country { get; set; }
    }
}

public class PersonalAddress
{

    public ReqAddressDetail CommAddress { get; set; }

    public AddressDetails PermanentAddress { get; set; }
}

创建单独的视图模型,或者包括一个属性(比如说)
bool IsMandatory
,并使用一个或类似的
[RequiredIfTrue(“IsMandatory”)]
属性您可以指向特定的元数据类,但我不确定这是否会使事情更干净。签出:但我不想对同一事物使用额外的属性。是否有任何方法可以将一些元数据值从CommAddress属性传递给它的子属性。或者在自定义验证中是否有任何方法区分commAddress city字段和permanentAddress city。您也可以创建自己的属性。