在MVC之外使用ValidationContext时,为什么未验证StringLength?

时间:2019-07-01 19:46:53

标签: c# asp.net-mvc validation

我在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,但不是。我想念什么?

1 个答案:

答案 0 :(得分:2)

您需要再添加一个参数:

Validator.TryValidateObject(model, validationContext, validationResults, true);

否则,它仅对“必需”进行验证。

MSDN link

  

validateAllProperties布尔

     

true以验证所有属性;如果false,则仅验证必需的属性