我有这样的事情:
[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)
我想要以下输出:
它在使用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)
结果是:
怎么了?谢谢.
我使用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) 我想使用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方法?
我在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" 时,我期待它生气.
我错过了什么?
提前致谢.
我正在使用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)
请建议
我需要在提交表单之前验证用户的输入字段值.
我在自定义控制器中创建了一个动作并用它装饰了该字段:
动作名称: 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]属性装饰另一个字段,则表单未提交,并且显示该字段所需的错误.但是,远程验证字段的场景后面不会进行验证.
如果我使用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) 我在我的域模型类上使用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) 据我所知,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中运行吗?
我在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中使用这些属性?
data-annotations ×10
c# ×7
asp.net-mvc ×4
validation ×4
.net ×2
asp.net-core ×1
dynamic-data ×1
email ×1
unit-testing ×1