C# 有条件地要求MVC类属性/类
我有一个Address类,用于模型中的MailingAddress和BillingAddress属性。我希望需要MailingAddress,但不需要BillingAddress,但我看不到用DataAnnotation实现这一点的方法 如果我能够在MailingAddress属性上设置[Required]属性,并以某种方式定义Address类应该如何处理所需逻辑的逻辑,我觉得这将是一个简单的解决方案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类应该如何处理所需逻辑的逻辑,我觉得这将是一个简单的解决方案 有什么想法吗?如果你的问题是如何在自己的逻辑中使用所需的属性,那么答案是通过使用反射。如果这不
有什么想法吗?如果你的问题是如何在自己的逻辑中使用所需的属性,那么答案是通过使用反射。如果这不是你的问题,请原谅我 从有问题的类型中获取所有属性,然后查看它是否用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?