标签: data-annotations

如何将DisplayName放在ErrorMessage格式上

我有这样的事情:

    [DisplayName("First Name")]
    [Required(ErrorMessage="{0} is required.")]
    [StringLength(50, MinimumLength = 10, ErrorMessage="{0}'s length should be between {2} and {1}.")]
    public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

  • 名字是必需的.
  • 名字的长度应在10到50之间.

它在使用ASP.NET MVC2错误摘要时有效,但当我尝试手动验证它时,如下所示:

        ValidationContext context = new ValidationContext(myModel, null, null);
        List<ValidationResult> results = new List<ValidationResult>();
        bool valid = Validator.TryValidateObject(myModel, context, results, true);
Run Code Online (Sandbox Code Playgroud)

结果是:

  • 名称是必需的.
  • 姓名的长度应在10到50之间.

怎么了?谢谢.

c# asp.net-mvc data-annotations

24
推荐指数
2
解决办法
2万
查看次数

如何调用验证属性进行测试?

我使用DataAnnotations中的RegularExpressionAttribute进行验证,并希望测试我的正则表达式.有没有办法直接在单元测试中调用属性?

我希望能够做类似的事情:

public class Person
{
    [RegularExpression(@"^[0-9]{3}-[0-9]{3}-[0-9]{4}$")]
    public string PhoneNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在单元测试中:

[TestMethod]
public void PhoneNumberIsValid
{
    var dude = new Person();
    dude.PhoneNumber = "555-867-5309";

    Assert.IsTrue(dude.IsValid);
}
Run Code Online (Sandbox Code Playgroud)

甚至

Assert.IsTrue(dude.PhoneNumber.IsValid);
Run Code Online (Sandbox Code Playgroud)

c# validation unit-testing dynamic-data data-annotations

24
推荐指数
2
解决办法
8725
查看次数

是否可以将DataAnnotations与接口一起使用?

我想使用DataAnnotations来验证实现某些接口的类,因此我将验证属性添加到接口,如下所示:

public interface IUser
{
    [Required]
    string Name { get; set; }

    [Display(Name = "Email Address")]
    [Required]
    string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用它时不起作用Validator.TryValidateObject.

有没有办法做到这一点而不必编写自定义TryValidateObject方法?

.net c# data-annotations

24
推荐指数
2
解决办法
7724
查看次数

数据注释如何工作?

我在ASP.NET MVC 3项目中使用Data Annotations来验证模型.这些都非常方便,但目前它们对我来说都很神奇.我读到数据注释不会抛出异常.那么MVC如何知道将验证错误添加到模型状态字典中?如果没有抛出异常,由于模型验证而在模型上设置属性的失败如何冒泡到MVC?我总是假设每次属性失败时抛出异常,并且MVC模型绑定捕获异常并将其添加到模型状态字典中.

为了测试这个,我创建了一个控制台应用程序,并添加了一个带有验证注释的示例类:

public class MyObject
{
    [StringLength(10, MinimumLength=3)]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我实例化了该对象,并尝试为Name属性分配小于3的值.尽管注释表明字符串长度小于3,但该属性分配得很好.

    static void Main(string[] args)
    {
        MyObject mine = new MyObject();
        mine.Name = "hi";
        Console.WriteLine(mine.Name);
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

这个小程序向控制台写出"hi".为什么?当我试图设置mine.Name为"hi" 时,我期待它生气.

我错过了什么?

提前致谢.

c# validation asp.net-mvc data-annotations asp.net-mvc-3

24
推荐指数
1
解决办法
3万
查看次数

实体框架中的外键4.1

我正在使用Entity Framework 4.1并使用外键的数据注释.我想知道如何定义产品和类别之间的一对多关系.我想要分类.categoryId with product.cid

public class Category
{
    public string CategoryId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public string CId { get; set; }

    public virtual Category Category { get; set; }
} 
Run Code Online (Sandbox Code Playgroud)

请建议

.net data-annotations ef-code-first entity-framework-4.1

23
推荐指数
2
解决办法
2万
查看次数

MVC 5远程验证

我需要在提交表单之前验证用户的输入字段值.

我在自定义控制器中创建了一个动作并用它装饰了该字段:

动作名称: CheckValue 控制器名称: Validate

[Remote("CheckValue", "Validate"), ErrorMessage="Value is not valid"]
public string Value { get; set; }
Run Code Online (Sandbox Code Playgroud)

问题是当我按提交时,表单正在提交,然后Value is not valid如果用户输入的值无效则显示消息.

如何验证用户输入的值并阻止在值无效时提交表单,并显示错误消息?

如果我尝试在JavaScript中检查表单是否有效$("#formId").valid()并返回true,则表示无论表的值是什么(有效与否),表单都有效.

另一方面,如果我用[Required]属性装饰另一个字段,则表单未提交,并且显示该字段所需的错误.但是,远程验证字段的场景后面不会进行验证.

validation data-annotations remote-validation asp.net-mvc-5

23
推荐指数
2
解决办法
3万
查看次数

使用Entity Framework 5.0进行数据注释(数据库优先)

如果我使用Entity Framework(v5.0)数据库第一种方法,那么使用数据注释进行验证的最佳方法是什么?

这是我的Entity Framework创建的部分类:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System.ComponentModel.DataAnnotations;

namespace ACore
{
    using System;
    using System.Collections.Generic;

    public partial class PayrollMarkup_State
    {
        [UIHint("StatesEditor")] // <-- I added this line but it will be overwritten
        public string State { get; set; }
        public …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework data-annotations entity-framework-5

22
推荐指数
1
解决办法
2万
查看次数

ASP.NET Core MetaDataType属性不起作用

我在我的域模型类上使用MetaDataType属性.它应该将属性信息从引用的类移动到已设置MetadataType属性的类中.但它没有像宣传的那样做.造成这个问题的原因是什么?

[MetadataType(typeof(ComponentModelMetaData))]
public partial class Component
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Repo> Repos { get; set; }
    public string Description { get; set; }   
}


public class ComponentModelMetaData
{
    [Required(ErrorMessage = "Name is required.")]
    [StringLength(30, MinimumLength = 3, ErrorMessage = "Name length should be more than 3 symbols.")]
    public string Name { get; set; }
    public ICollection<Repo> Repos { get; set; }
    [Required(ErrorMessage = "Description is required.")]
    public string …
Run Code Online (Sandbox Code Playgroud)

c# data-annotations asp.net-core

22
推荐指数
1
解决办法
1万
查看次数

DataTypeAttribute验证是否在MVC2中有效?

据我所知,System.ComponentModel.DataAnnotations.DataTypeAttribute不适用于MVC v1中的模型验证.例如,

public class Model
{
  [DataType("EmailAddress")]
  public string Email {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,不会在MVC v1中验证Email属性.它在MVC v2中运行吗?

c# email validation asp.net-mvc data-annotations

21
推荐指数
3
解决办法
1万
查看次数

Web API可空必需属性需要DataMember属性

我在Web API Post操作上收到以下VM

public class ViewModel
{
    public string Name { get; set; }

    [Required]
    public int? Street { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我发帖时,我收到以下错误:

"ViewModel"类型的媒体"街道"无效.标记为[必需]的值类型属性也必须标记为[DataMember(IsRequired = true)],以便根据需要进行识别.考虑使用[DataContract]归因声明类型,使用[DataMember(IsRequired = true)]归因属性.

似乎错误是明确的,所以我只想完全确定当你有一个具有必需的可空属性的类时,需要使用[DataContract]和[DataMember]属性.

有没有办法避免在Web API中使用这些属性?

asp.net-mvc data-annotations asp.net-web-api

21
推荐指数
1
解决办法
9954
查看次数