Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有条件地要求MVC类属性/类_C#_Asp.net Mvc_Asp.net Mvc 3_Validation_Data Annotations - Fatal编程技术网

C# 有条件地要求MVC类属性/类

C# 有条件地要求MVC类属性/类,c#,asp.net-mvc,asp.net-mvc-3,validation,data-annotations,C#,Asp.net Mvc,Asp.net Mvc 3,Validation,Data Annotations,我有一个Address类,用于模型中的MailingAddress和BillingAddress属性。我希望需要MailingAddress,但不需要BillingAddress,但我看不到用DataAnnotation实现这一点的方法 如果我能够在MailingAddress属性上设置[Required]属性,并以某种方式定义Address类应该如何处理所需逻辑的逻辑,我觉得这将是一个简单的解决方案 有什么想法吗?如果你的问题是如何在自己的逻辑中使用所需的属性,那么答案是通过使用反射。如果这不

我有一个Address类,用于模型中的MailingAddress和BillingAddress属性。我希望需要MailingAddress,但不需要BillingAddress,但我看不到用DataAnnotation实现这一点的方法

如果我能够在MailingAddress属性上设置[Required]属性,并以某种方式定义Address类应该如何处理所需逻辑的逻辑,我觉得这将是一个简单的解决方案


有什么想法吗?

如果你的问题是如何在自己的逻辑中使用所需的属性,那么答案是通过使用反射。如果这不是你的问题,请原谅我

从有问题的类型中获取所有属性,然后查看它是否用RequiredAttribute修饰

class ParentClass
{
      [Required]
      public Address MailingAddress { get; set; }

      public Address BillingAddress { get; set; }
}

(...)

Type t = typeof(ParentClass);

foreach (PropertyInfo p in t.GetProperties())
{
    Attribute a = Attribute.GetCustomAttribute(p, typeof(RequiredAttribute));
    if (a != null)
    {
          // The property is required, apply your logic
    }
    else
    {
          // The property is not required, apply your logic
    }
}
编辑:修复了代码中的输入错误


编辑2:扩展代码示例

如果您的问题是如何在自己的逻辑中使用必需的属性,那么答案是使用反射。如果这不是你的问题,请原谅我

从有问题的类型中获取所有属性,然后查看它是否用RequiredAttribute修饰

class ParentClass
{
      [Required]
      public Address MailingAddress { get; set; }

      public Address BillingAddress { get; set; }
}

(...)

Type t = typeof(ParentClass);

foreach (PropertyInfo p in t.GetProperties())
{
    Attribute a = Attribute.GetCustomAttribute(p, typeof(RequiredAttribute));
    if (a != null)
    {
          // The property is required, apply your logic
    }
    else
    {
          // The property is not required, apply your logic
    }
}
编辑:修复了代码中的输入错误


编辑2:扩展代码示例

这只是突然出现在我脑海中的一个奇怪的怪癖:

一个简单的解决方案可能是将Address子类化为OptionalAddress

我认为所需的属性不会被继承到子类

[AttributeUsage(Inherited=False)]
如果需要也会出现在脑海中

更具MVCish的解决方案可能是实现自定义模型绑定器(完全未经测试):


这只是突然出现在我脑海中的一个奇怪的怪癖:

一个简单的解决方案可能是将Address子类化为OptionalAddress

我认为所需的属性不会被继承到子类

[AttributeUsage(Inherited=False)]
如果需要也会出现在脑海中

更具MVCish的解决方案可能是实现自定义模型绑定器(完全未经测试):


在此之前提出的问题中有许多选项:

您是否需要在客户端完成此验证


IValidateableObject将与任何现有属性一起使用,并可提供额外的自定义验证

在此之前提出的问题中,有许多选项可用:

您是否需要在客户端完成此验证


IValidateableObject将与任何现有属性一起使用,并可提供额外的自定义验证

谢谢你的回复,但我认为这不是我真正想要的。我需要能够使我的Address类成为必需的,但仅适用于父类中的MailingAddress属性,而不适用于BillingAddress属性。需要的不是类,而是MailingAddress属性。然后你可以在父类中用[Required]来修饰MailingAddress,你可以使用上面显示的typeof()来代替typeof(Address),谢谢你的回复,但我认为这不是我真正想要的。我需要能够使我的Address类成为必需的,但仅适用于父类中的MailingAddress属性,而不适用于BillingAddress属性。需要的不是类,而是MailingAddress属性。然后,您可以在父类中使用[Required]来修饰MailingAddress,并使用typeof()来代替typeof(Address),如上所示RequiredAttribute仅适用于属性、参数和字段。你不是说一个类是必需的,而是说它的一个属性是。我想OP想知道如何说一个类的一个实例的属性是必需的,而另一个实例的属性不是。。。这两个实例是同一父对象中的属性。是的,我也是这样理解的。在我看来,虽然没有必要进行分类,但用[required]来装饰所需的房产就足够了。我在上面编辑的答案反映了这一点。我认为在MVC中有一个必需的地址,你需要确保一些属性,例如:邮政编码也是必需的。我看不出你的答案会处理这种情况。别忘了IValidTeableObject?RequiredAttribute仅适用于属性、参数和字段。你不是说一个类是必需的,而是说它的一个属性是。我想OP想知道如何说一个类的一个实例的属性是必需的,而另一个实例的属性不是。。。这两个实例是同一父对象中的属性。是的,我也是这样理解的。在我看来,虽然没有必要进行分类,但用[required]来装饰所需的房产就足够了。我在上面编辑的答案反映了这一点。我认为在MVC中有一个必需的地址,你需要确保一些属性,例如:邮政编码也是必需的。我看不出你的答案在处理那个案子。别忘了IValidateableObject?