我在MVC应用程序中有一个数据输入页面,并且具有用于验证输入的已定义数据注释。这按预期工作。
我还上传了一个文件,该文件需要使用相同的规则来验证传入的数据,因此,我决定将每一行映射到模型类的实例中,而不是再次编写规则,因此可以使用相同的验证规则
[Required]属性有效,但是我使用的其他StringLength和Range无效。这是我在LinqPad中测试的示例,具有相同的结果:
void Main()
{
var model = new Model { Name = "Test String" };
var validationResults = new List<ValidationResult>();
var validationContext = new ValidationContext(model, null, null);
Validator.TryValidateObject(model, validationContext, validationResults);
validationResults.Select(w => w.ErrorMessage).Dump();
}
// Define other methods and classes here
public class Model
{
[Required, StringLength(8, MinimumLength = 1, ErrorMessage = "String length is outside of range.")]
public string Name { get; set; }
}
我希望StringLength导致验证错误,因为它大于最大长度8,但不是。我想念什么?
答案 0 :(得分:2)
您需要再添加一个参数:
Validator.TryValidateObject(model, validationContext, validationResults, true);
否则,它仅对“必需”进行验证。
validateAllProperties
布尔
true
以验证所有属性;如果false
,则仅验证必需的属性