Phi*_*per 6 asp.net-mvc inheritance validationattribute
我正在使用其他自定义联系模型类继承的基本联系模型.
public class BaseContactModel
{
[Required(ErrorMessage = "Firstname is required")]
public virtual string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
基本联系人模型使用验证属性来标记属性是必需的,但在某些情况下我想要覆盖或停止它.这有可能吗?
public class ContactModel : BaseContactModel
{
[NotRequired]
public override string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用新的验证属性NotRequired来返回true,但看起来属性正在堆叠,因此Required和NotRequired正在运行且验证失败.
在寻找解决方案(我找不到)时,我发现一些不相关的属性具有"继承"属性,但我没有在System.ComponentModel.DataAnnotations中的本机验证属性中看到这一点.
这是一个失败的原因吗?我是否需要推出支持禁用继承的自己的版本?任何帮助非常感谢.
请参阅下面的内容,我创建了一个Model继承自另一个类的类BaseModel,使用 new 关键字,然后验证每个实例之一。据我所知,它们都使用基本属性。
ControlModel为了使验证例程更加清晰,我添加了一个控制类。
class Program
{
static void Main(string[] args)
{
ValidationTest<Model>();
ValidationTest<BaseModel>();
ValidationTest<ControlModel>();
Console.Read();
}
private static void WriteAttributeInfo<T>()
{
Console.WriteLine(string.Concat(typeof(T), " attributes:"));
typeof(T).GetProperties().SelectMany(m => m.GetCustomAttributes(true)).Select(a => { Console.WriteLine(a); return a; }).ToList();
}
private static void ValidationTest<T>()
{
object obj = Activator.CreateInstance<T>();
Console.WriteLine(string.Concat(typeof(T), " test: isValid = ", Validator.TryValidateObject(obj, new ValidationContext(obj, serviceProvider: null, items: null), new List<ValidationResult>())));
}
}
class ControlModel
{
public string FirstName { get; set; }
public string Email { get; set; }
}
class BaseModel
{
[RequiredAttribute]
public virtual string FirstName { get; set; }
[RequiredAttribute]
public virtual string Email { get; set; }
}
class Model : BaseModel
{
public new string FirstName { get; set; }
public new string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ConsoleApplication1.模型测试:isValid = False
ConsoleApplication1.BaseModel 测试:isValid = False
ConsoleApplication1.ControlModel 测试:isValid = True
从这个示例来看,您似乎无法覆盖/隐藏/忽略继承的必需验证(尚未尝试其他)属性。
| 归档时间: |
|
| 查看次数: |
2243 次 |
| 最近记录: |