验证 ASP.NET MVC 中的对象而不将其传递到操作中

Validate an Object in ASP.NET MVC without passing it into an Action

在 ASP.NET MVC 中,您可以使用 ModelState.IsValid() 验证传递给 Action 的模型。

我想验证任意对象而不是传入的一个模型。我该怎么做,使用框架的库?

public ActionResult IsValidSoFar()
{
    // Get a user's autosaved data
    var json = await ...
    HomeModel model = JsonConvert.Deserialize<HomeModel>(json);

    // Validate the model <---- How?        
}

public class HomeModel
{
    [Required, MaxLength(100)]
    public string Name { get; set; }
}

您可以使用 ValidationContext class ... 如下所示

var context = new ValidationContext(modelObject);
    var results = new List<ValidationResult>();
    var isValid = Validator.TryValidateObject(modelObject, context, results);

    if (!isValid)
    {
        foreach (var validationResult in results)
        {
            //validation errors
        }
    }

您可以使用 ValidateModel 或 TryValidateModel 控制器方法。

  • ValidateModel - 如果模型无效则抛出异常。
  • TryValidateModel - returns 指示模型是否有效的布尔值。

重要提示:如果您逐一验证模型列表,您可能希望通过调用ModelState.Clear( );

请看我的问题:Validate list of models programmatically in ASP.NET MVC