验证 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
在 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