gpt4 book ai didi

validation - 如何强制MVC验证IValidatableObject

转载 作者:行者123 更新时间:2023-12-03 08:46:45 25 4
gpt4 key购买 nike

看来,当MVC验证其首先通过DataAnnotation属性(如必需或范围)运行的模型时,如果其中任何一个失败,它将跳过在我的IValidatableObject模型上运行Validate方法。

有没有办法让MVC继续运行该方法,即使其他验证失败呢?

最佳答案

您可以通过传入ValidationContext的新实例来手动调用Validate(),如下所示:

[HttpPost]
public ActionResult Create(Model model) {
if (!ModelState.IsValid) {
var errors = model.Validate(new ValidationContext(model, null, null));
foreach (var error in errors)
foreach (var memberName in error.MemberNames)
ModelState.AddModelError(memberName, error.ErrorMessage);

return View(post);
}
}

此方法的一个警告是,在没有属性级(DataAnnotation)错误的实例中,验证将运行两次。为了避免这种情况,您可以在模型中添加一个属性,例如一个 bool(boolean) 值Validated,运行该值后,您可以在Validate()方法中将该属性设置为true,然后在 Controller 中手动调用该方法之前进行检查。

因此,在您的 Controller 中:
if (!ModelState.IsValid) {
if (!model.Validated) {
var validationResults = model.Validate(new ValidationContext(model, null, null));
foreach (var error in validationResults)
foreach (var memberName in error.MemberNames)
ModelState.AddModelError(memberName, error.ErrorMessage);
}

return View(post);
}

在您的模型中:
public bool Validated { get; set; }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
// perform validation

Validated = true;
}

关于validation - 如何强制MVC验证IValidatableObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com