Tag: data annotations

从模型中获取数据注释属性

我想创建自定义客户端validation器,但我想通过业务逻辑层的Data Annotations属性定义validation规则。 如何在运行时访问模型validation属性? 我想写’generator’,它会转换这段代码: public class LoginModel { [Required] [MinLength(3)] public string UserName { get; set; } [Required] public string Password { get; set; } } 进入这一个: var loginViewModel= { UserName: ko.observable().extend({ minLength: 3, required: true }), Password: ko.observable().extend({ required: true }) }; 但当然不是来自.cs来源。 =) 也许反思? UPD 我发现了这个方法: MSDN 。 但无法理解如何使用它。

接口中的C#数据注释

快速问题…… 如果我在界面中加一个符号…… 说[必填] 我可以在C#类中省略该属性的符号吗? 即我可以…… Interface IFoo { [Required] string Bar {get; set;} } Class Foo : IFoo { string Bar {get; set;} } 或者我是否需要不将符号放在界面中并执行此操作… Interface IFoo { string Bar {get; set;} } Class Foo : IFoo { [Required] string Bar {get; set;} }

ASP.NET MVC显示日期没有时间

我的模型字段以下列方式装饰: [DataType(DataType.Date)] [Display(Name = “Date of birth”)] public string DateOfBirth { get; set; } 当我想使用以下代码在视图中显示值时: m.DateOfBirth) %> 问题是日期与其时间值一起显示。 我想知道为什么它不考虑DateType属性并且只显示没有时间的日期值。 我知道我可以为DateTime创建一个显示模板,但在其他情况下,除了出生日期之外,我想要显示时间和日期。 如何解决问题?

来自类的DataAnnotationsvalidation

我在一个纯C#应用程序的项目中使用DataAnnotations,根据DataAnnotations属性validation模型/文档的最佳方法是什么?

扩展MVC RequiredAttribute

我有一个ExtendedAttribute的扩展类,它不会发回错误消息。 如果我在调试器中检查它,文本就没问题了。 public class VierRequired : RequiredAttribute { public VierRequired(string controlName) { //… } public string VierErrorMessage { get { return ErrorMessage; } set { ErrorMessage = value; } } // validate true if there is any data at all in the object public override bool IsValid(object value) { if (value != null && !string.IsNullOrEmpty(value.ToString())) […]

POST和PUT的不同型号要求

假设我有一个控制器CatController其中包含GET,POST和PUT操作。 它们都使用相同的Cat资源,如下所示: public class CatDto { public int Id { get; set; } [Required] public string Name { get; set; } [Required] public bool IsFriendly {get; set; } } 但是,只有在创建新cat(POST)时才需要Name和IsFriendly属性,但在更新它(PUT)时可选,以允许仅更新单个属性。 到目前为止,我处理这个问题的方法只是有两个类,一个CreateCat和UpdateCat ,它们具有相同的属性但不同的数据注释。 但是我不想要维护两个几乎相同的类。 我当然可以在每个操作中手动validation模型,但数据注释对于诸如全局模型validation器和自动生成Swagger架构之类的东西非常有用。 我也使用Swagger模式自动生成SDK(使用ApiMatic ),这导致生成两个重复的类( CreateCat和UpdateCat ),实际上应该只是单个资源( Cat )。 有没有另一种方法可以实现我只想用一个class级做的事情?

DataAnnotations的FileExtensions属性在MVC中不起作用

我试图在MVC中使用HTML FileUpload控件上传文件。 我想validation该文件只接受特定的扩展名。 我已经尝试使用DataAnnotations命名空间的FileExtensions属性,但它不起作用。 见下面的代码 – public class FileUploadModel { [Required, FileExtensions(Extensions = (“.xlsx,.xls”), ErrorMessage = “Please select an Excel file.”)] public HttpPostedFileBase File { get; set; } } 在控制器中,我正在编写如下代码 – [HttpPost] public ActionResult Index(FileUploadModel fileUploadModel) { if (ModelState.IsValid) fileUploadModel.File.SaveAs(Path.Combine(Server.MapPath(“~/UploadedFiles”), Path.GetFileName(fileUploadModel.File.FileName))); return View(); } 在View中,我写了下面的代码 – @using (Html.BeginForm(“Index”, “FileParse”, FormMethod.Post, new { enctype = “multipart/form-data”} […]

使用自定义DataAnnotationsModelValidatorProvider进行服务器端validation

我已经设置了一个自定义提供程序,允许从数据存储而不是静态代码中设置validation属性。 在我的.NET MVC 4项目中使用客户端validation很好用,但我无法让服务器端validation工作。 CustomModelValidatorProvider .cs: public class CustomModelValidatorProvider:DataAnnotationsModelValidatorProvider { protected override IEnumerable GetValidators(ModelMetadata元数据,ControllerContext上下文,IEnumerable属性) { //在这里设置数据存储区的属性 return base.GetValidators(元数据,上下文,属性); } } 在我的Global.asax.cs中,我有: protected void Application_Start() { ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(new CustomModelValidatorProvider()); } 在Web API方法中,我有: var validationResultList = new List(); bool valid = Validator.TryValidateObject(myModelObject,new ValidationContext(myModelObject,null,null),validationResultList,true); 在这里,有效总是如此。 即使Jquery客户端validation显示错误。 在服务器端,我的自定义提供程序不用于应用数据注释。 当我在GetValidators()中设置断点时,在创建View时调用它并正确显示客户端validation器,但是当模型绑定到控制器时不会再次调用它。 我错过了一步吗? 任何帮助是极大的赞赏! UPDATE 当对象发布到Controller时,自定义validation器可以正常工作,但在发布到ApiController时不会被触发。

自定义validation属性MVC2

我有一个自定义validation属性,它检查两个属性是否具有相同的值(如密码和重新键入密码): [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] public class EqualToPropertyAttribute : ValidationAttribute { public string CompareProperty { get; set; } public EqualToPropertyAttribute(string compareProperty) { CompareProperty = compareProperty; ErrorMessage = string.Format(Messages.EqualToError, compareProperty); } public override bool IsValid(object value) { if (value == null) { return true; } PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value); var property = properties.Find(CompareProperty, true); […]

在Windows窗体项目上使用DataAnnotations

我最近使用ASP.Net MVC和DataAnnotations,并且正在考虑对Forms项目使用相同的方法,但我不确定如何去做。 我已经设置了我的属性,但是当我单击“保存”时似乎没有检查它们。 更新:我使用了Steve Sanderson的方法 ,它将检查我的类的属性并返回一组错误,如下所示: try { Business b = new Business(); b.Name = “feds”; b.Description = “DFdsS”; b.CategoryID = 1; b.CountryID = 2; b.EMail = “SSDF”; var errors = DataAnnotationsValidationRunner.GetErrors(b); if (errors.Any()) throw new RulesException(errors); b.Save(); } catch(Exception ex) { } 您如何看待这种方法?