我有一个带有DataAnnotation属性的对象图,其中对象的某些属性是本身具有验证属性的类,依此类推.
在以下场景中:
public class Employee
{
[Required]
public string Name { get; set; }
[Required]
public Address Address { get; set; }
}
public class Address
{
[Required]
public string Line1 { get; set; }
public string Line2 { get; set; }
[Required]
public string Town { get; set; }
[Required]
public string PostalCode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试来验证Employee的Address与没有价值PostalCode,那么我想(和期望)例外,但我得到没有.我是这样做的:
var employee = new Employee
{
Name = "Neil Barnwell",
Address = new Address …Run Code Online (Sandbox Code Playgroud) 似乎当MVC验证模型时,它首先运行DataAnnotation属性(如required或range),如果其中任何一个失败,它会跳过在我的IValidatableObject模型上运行Validate方法.
有没有办法让MVC继续运行该方法,即使其他验证失败了?
摘要:
我想要一个数据注释验证器来引用同一个类中的另一个属性(TitleAuthorAndPublishingConfiguration).
但是,不直接在此类上调用DB.SaveChanges().而是在这个类(WebsiteConfiguration)的父级上调用它.
因此validationContext.ObjectType返回WebsiteConfiguration,我无法引用TitleAuthorAndPublishingConfiguration数据注释验证器中的属性.
WebsiteConfiguration.cs
public class WebsiteConfiguration
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public TitleAuthorAndPublishingConfiguration TitleAuthorAndPublishing { get; set; }
public BookChaptersAndSectionsConfiguration BookChaptersAndSections { get; set; }
public SocialMediaLoginsConfiguration SocialMediaLogins { get; set; }
public TagGroupsConfiguration TagGroups { get; set; }
}
public class TitleAuthorAndPublishingConfiguration
{
public string BookTitle { get; set; }
public bool IsPublished { get; set; }
// how do I access …Run Code Online (Sandbox Code Playgroud) 问题:
我尝试验证嵌套模型,但在嵌套模型实例创建时,数据注释属性未执行.
public class Model
{
[Required]
string MainTitle {get;set;}
public NestedModel NestedModel { get; set; }
}
public class NestedModel
{
[Required]
string SubTitle {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在控制器:
public ActionResult GetTitles(Model model)
{
if(ModelState.IsValid)
{
//Submodel is always valid even if the sub-title is null.
}
}
Run Code Online (Sandbox Code Playgroud)
Mvc4不支持吗?如何将验证扩展到这方面?
我正在测试 Blazor,但遇到了验证问题。在验证一个简单的类时,我可以只使用注释。如果我有自己的自定义类,尽管验证不会对我的自定义类中的所有内容运行。该问题似乎特定于 Blazor,因为我可以在 ASP 中使用此验证。
这是我的两个简单模型:
public class TestModel
{
[Required]
[Range(12, 400, ErrorMessage = "This works")]
public int Count { get; set; }
public KeyValue KeyValues { get; set; }
public TestModel()
{
Count = 4;
KeyValues = new KeyValue()
{
Key = 5,
Value = "str"
};
}
}
Run Code Online (Sandbox Code Playgroud)
和 KeyValue 类
public class KeyValue
{
[Required]
[Range(10, 300, ErrorMessage = "This number check doesn't")]
public int Key { get; set; }
[Required]
[StringLength(10, MinimumLength = 5, ErrorMessage …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用System.ComponentModel.DataAnnotations属性验证包含具有验证规则的其他对象的模型,希望默认的MVC实现就足够了:
var obj = js.Deserialize(json, objectInfo.ObjectType);
if(!TryValidateModel(obj))
{
// Handle failed model validation.
}
Run Code Online (Sandbox Code Playgroud)
该对象由原始类型组成,但也包含其他也使用DataAnnotications的类.像这样:
public class Entry
{
[Required]
public Person Subscriber { get; set; }
[Required]
public String Company { get; set; }
}
public class Person
{
public String FirstName { get; set;}
[Required]
public String Surname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是ASP.NET MVC验证只降低了1级,只评估顶级类的属性,可以在digitallycreated.net/Blog/54/deep-inside-asp.net-mvc-2上阅读-model-元数据和验证.
有谁知道这个优雅的解决方案?我尝试过xVal,但它们似乎使用了非递归模式(http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/).
有人必须在此之前遇到这个问题吗?如果您正在设计Web服务,那么在模型中嵌套对象似乎并不那么奇怪.
validation asp.net-mvc asp.net-mvc-2-validation data-annotations asp.net-mvc-2
遇到了使用DataAnnotation验证ASP.NET MVC4中复杂类的问题.
让我们有一个以下模型(简化)
public class Customer
{
[Required]
[StringLength(8, MinimumLength = 3)]
public string UserName { get; set; }
[Required]
[StringLength(8, MinimumLength = 3)]
public string DisplayName { get; set; }
}
public class Order
{
public Customer customer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试在我的控制器中验证此模型的实例:
// CREATE A DUMMY INSTANCE OF THE MODEL
Customer cust = new Customer();
cust.UserName = "x";
cust.DisplayName = "x";
Order orderModel = new Order();
orderModel.customer = cust;
// VALIDATE MODEL
TryValidateModel(orderModel); // ModelState.IsValid is TRUE …Run Code Online (Sandbox Code Playgroud) 如何在同一字段上多次使用相同的自定义验证属性,或者只是为服务器端和客户端验证启用AllowMultiple = true?
我有以下自定义验证属性:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,
AllowMultiple = true, Inherited = true)]
public class RequiredIfAttribute : ValidationAttribute,IClientValidatable
{
public RequiredIfAttribute(string dependentProperties,
string dependentValues = "",
string requiredValue = "val")
{
}
}
Run Code Online (Sandbox Code Playgroud)
在dependentProperties中,我可以指定由逗号分隔的多个依赖属性,在dependentValues中,我可以指定依赖属性验证应该处理哪些值,最后在requiredValue中,我可以指定要验证的字段的期望值.
在我的模型中有两个属性LandMark,PinCode和我想使用验证如下:
public string LandMark { get; set; }
[RequiredIf("LandMark","XYZ","500500")]
[RequiredIf("LandMark", "ABC", "500505")]
public string PinCode { get; set; }
Run Code Online (Sandbox Code Playgroud)
这里的值只是例如,因为似乎我可以多次添加属性并且不会出现任何编译错误,我已经在属性中实现了TypeID,如果我从中删除客户端验证,它在服务器端运行良好.但是当我在属性上实现IClientValidatable时,它给了我一个错误:
"不引人注目的客户端验证规则中的验证类型名称必须是唯一的."
任何帮助我该如何解决?
c# ×5
validation ×4
asp.net-mvc ×3
.net ×1
.net-core ×1
asp.net ×1
blazor ×1
dbcontext ×1
recursion ×1