Tag: 数据注释

MVC3按属性名称的本地化显示名称属性

我最近学习了如何使用以下文章为我的模型属性创建本地化显示名称: DataAnnotations的简化本地化 我现在试图通过从构造函数中删除参数来进一步推动它。 意思不是拥有这个 public class User { [Required] [LocalizedDisplayNameAttribute(“User_Id”)] public int Id { get; set; } [Required] [StringLength(40)] [LocalizedDisplayNameAttribute(“User_FirstName”)] public string FirstName { get; set; } [Required] [StringLength(40)] [LocalizedDisplayNameAttribute(“User_LastName”)] public string LastName { get; set; } } 我想要这个 public class User { [Required] [LocalizedDisplayNameAttribute] public int Id { get; set; } [Required] [StringLength(40)] [LocalizedDisplayNameAttribute] […]

Bools的数据注释

在下面我有三个不同的类别。 我将如何构建validation以确保每个类别至少选择一个布尔值? //残疾人 [Display(Name = “Learning Disabilities”)] public bool LD { get; set; } [Display(Name = “Developmental Disabilities”)] public bool DD { get; set; } [Display(Name = “AD/HD”)] public bool ADHD { get; set; } [Display(Name = “Autism”)] public bool Autism { get; set; } //年龄阶层 [Display(Name = “Child”)] public bool child { get; set; […]

DataAnnotations命名空间中的Enum值是否有开箱即用的validation器?

C#枚举值不仅限于其定义中列出的值,还可以存储其基类型的任何值。 如果未定义基本类型而不是Int32或者仅使用int 。 我正在开发一个WCF服务,需要确信某些枚举有一个值,而不是所有枚举为0的默认值。我从一个unit testing开始,找出[Required]是否能在这里做正确的工作。 using System.ComponentModel.DataAnnotations; using Xunit; public enum MyEnum { // I always start from 1 in order to distinct first value from the default value First = 1, Second, } public class Entity { [Required] public MyEnum EnumValue { get; set; } } public class EntityValidationTests { [Fact] public void TestValidEnumValue() […]

使用数据注释进行模型validation的错误消息

鉴于以下类别: using System.ComponentModel.DataAnnotations; public class Book{ public Contact PrimaryContact{get; set;} public Contact SecondaryContact{get; set;} [Required(ErrorMessage=”Book name is required”)] public string Name{get; set;} } public class Contact{ [Required(ErrorMessage=”Name is required”)] public string Name{get; set;} } 有没有一种干净的方法我可以使用DataAnnotations为Book每个Contact实例提供明确的错误消息? 例如,如果PrimaryContact实例中缺少名称,则错误将显示为“需要主要联系人姓名”。 我目前的解决方案是创建一个validation服务,检查模型状态是否存在字段错误,然后删除所述错误并使用我想要的特定语言将其添加回来。

使用属性validation

我有,比方说,这个简单的类: public class User { [Required(AllowEmptyStrings = false, ErrorMessage=”EmailIsRequired”] public string EmailAddress { get; set; } } 我知道如何在System.ComponentModel.DataAnnotations命名空间中使用Validator.TryValidateProperty和Validator.TryValidateObject。 为了使其工作,您需要要validation的对象的实际实例。 但是现在,我想要在没有User类实例的情况下validation某个值,例如: TryValidateValue(typeof(User), “EmailAddress”, “test@test.com”); 我的目标是在实际必须实例化对象本身之前测试一个值(原因是我只允许创建有效的域实体)。 所以实际上我想在类而不是实例上使用validation属性。 有什么想法可以做到吗? 谢谢! 编辑:同时我决定不使用数据注释,而是使用http://fluentvalidation.codeplex.com,以便validation移出实体之外。 这样,可以从实体内部以及我的命令处理程序中触发validation。 由于流利的符号,validation本身看起来更具可读性。

使用数据注释进行多对多映射

[Table(“UserMaster”)] public class UserMaster { public UserMaster() { this.Roles = new List(); } [Key] public int UserId { get; set; } public string UserName { get; set; } public ICollection Roles { get; set; } } [Table(“Role”)] public class Role { public Role() { this.Users = new List(); } public int RoleId{ get; set; } […]

CustomValidationAttribute指定的方法未被调用

我正在使用System.ComponentModel.DataAnnotations.CustomValidationAttributevalidation我的一个POCO类,当我尝试对其进行unit testing时,它甚至没有调用validation方法。 public class Foo { [Required] public string SomethingRequired { get; set } [CustomValidation(typeof(Foo), “ValidateBar”)] public int? Bar { get; set; } public string Fark { get; set; } public static ValidationResult ValidateBar(int? v, ValidationContext context) { var foo = context.ObjectInstance as Foo; if(!v.HasValue && String.IsNullOrWhiteSpace(foo.Fark)) { return new ValidationResult(“Either Bar or Fark must […]

数据注释如何工作?

我在ASP.NET MVC 3项目中使用Data Annotations来validation模型。 这些非常方便,但目前它们对我来说都很神奇。 我读到数据注释不会抛出exception。 那么MVC如何知道将validation错误添加到模型状态字典中? 如果没有抛出exception,由于模型validation而在模型上设置属性的失败如何冒泡到MVC? 我总是假设每次属性失败时抛出exception,并且MVC模型绑定捕获exception并将其添加到模型状态字典中。 为了测试这个,我创建了一个控制台应用程序并添加了一个带有validation注释的示例类: public class MyObject { [StringLength(10, MinimumLength=3)] public string Name { get; set; } } 然后,我实例化了该对象,并尝试为Name属性分配小于3的值。尽管注释表明字符串长度小于3,但该属性分配得很好。 static void Main(string[] args) { MyObject mine = new MyObject(); mine.Name = “hi”; Console.WriteLine(mine.Name); Console.ReadLine(); } 这个小程序向控制台写出“hi”。 为什么? 当我试图将mine.Name设置为“hi”时,我期待它生气。 我错过了什么? 提前致谢。

我可以创建一个采用值类型或引用类型但总是返回可空类型的generics方法

这是我的方法。 请注意,我返回通用参数R的等效可空类型: public static Nullable GetValue(this T a, Expression<Func> expression) where T : Attribute where R : struct { if (a == null) return null; PropertyInfo p = GetProperty(expression); if (p == null) return null; return (R)p.GetValue(a, null); } 我可以在调用中使用它来获取如下属性的值: //I don’t throw exceptions for invalid or missing calls //because I want to chain the […]

数据注释的entity frameworkt4模板在哪里?

我一直在谷歌搜索这个不停的2天,并且找不到一个完整的,可以使用的,完全实现的生成DataAnnotations的t4模板。 他们甚至存在吗? 我使用标准t4模板生成POCO。 实际的数据库表具有描述某些validation规则的元数据,例如not null,nvarchar(25)等。 所以我想要的是一个t4模板,它可以使用我的表并生成带有 DataAnnotations的POCO,例如 public class Person { [Required] [StringLength(255)] public FirstName {get;set} } 这是一个基本的和基本的要求,当然我不能成为全世界第一个有这个要求的人吗? 我不想在这里重新发明轮子。 然而,经过几天的高低搜索,我还没有找到它。 这必须是可能的(并且希望必须在某处才可以下载) – 当数据库中已经存在这些注释的元数据时,必须手动输入这些注释是犯罪上的错误。