- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用其他自定义联系人模型类继承的基本联系人模型。
public class BaseContactModel
{
[Required(ErrorMessage = "Firstname is required")]
public virtual string FirstName { get; set; }
}
基本联系人模型使用验证属性来标记某个属性是必需的,但在某些情况下我想覆盖或停止该属性。这可能吗?
public class ContactModel : BaseContactModel
{
[NotRequired]
public override string FirstName { get; set; }
}
我尝试使用新的验证属性 NotRequired 来返回 true,但似乎属性只是堆叠在一起,因此需要和 NotRequired 正在运行,并且验证失败。
在寻找解决方案(我找不到)时,我发现一些不相关的属性具有“继承”属性,但我在 System.ComponentModel.DataAnnotations< 的 native 验证属性中没有看到这一点/strong>.
这是一个失败的原因吗?我是否需要推出自己的版本来支持禁用继承?非常感谢任何帮助。
最佳答案
请参阅下面的内容,我创建了一个从另一个 BaseModel
继承的类 Model
,使用 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; }
}
ConsoleApplication1.Model 测试:isValid = False
ConsoleApplication1.BaseModel 测试:isValid = False
ConsoleApplication1.ControlModel 测试:isValid = True
从这个示例中,您似乎无法覆盖/隐藏/忽略继承的必需验证(尚未尝试其他)属性。
关于asp.net-mvc - 防止继承模型中的验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12788575/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!