Kyl*_*e S 7 c# asp.net-mvc data-annotations
我有一个电话号码通知模型(用户通过与他们的帐户关联的电话号码获得紧急情况通知,并且他们可以设置调用这些电话的顺序)。大多数情况下,模型的电话号码部分是必需的,但在创建新用户的过程中存在一种特殊情况,我们不想强制使用它。
我创建了一个非常简单的子对象 UserCreationPhoneNotificationModel,它继承自上述 UserPhoneNotificationModel。还有一些其他小的更改,但这里的相关更改是覆盖 PhoneNumber 字段,以便不再需要它。
在父模型中它是
[Required]
public virtual string PhoneNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
在子模型中它只是
public override string PhoneNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
我认为这可以解决问题,但显然不是。我认为问题在于 RequiredAttribute 上会有 Inherited = true ,但事实并非如此,所以我不完全确定为什么它会被继承到子类中。
我做了双重检查以确保,从父类中的字段中删除 Required 也使得子类中的字段不需要,所以这绝对是某种继承的东西。
可以通过用同名的新属性隐藏现有属性来完成。所以,如果父类中的属性是这样的:
[Required]
public virtual string PhoneNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
您可以在子类中定义新属性,如下所示:
public new string PhoneNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
这将在子类中隐藏 PhoneNumber 属性及其属性。现在您可以将任何其他属性与它一起使用。例如,您可以[PhoneNumber]向子类中的属性添加属性。
小智 -2
如果使用 C# 4.0,
编写“新”构造函数怎么样?
public new string PhoneNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
我不确定它是否有效。
| 归档时间: |
|
| 查看次数: |
4485 次 |
| 最近记录: |