asp.net-mvc - 手动触发万无一失的验证

标签 asp.net-mvc foolproof-validation

我正在使用 Foolproof Validation所以我可以在我的 View 模型上使用 [RequiredIf] 属性。问题是我想在我的代码中使用 Controller 外部的相同逻辑触发验证。

我尝试创建自己的验证上下文并使用 Validatior.TryValidateObject;然而,Foolproof 的自定义 RequiredIf 验证器失败了。除了将模型传递给 Controller ​​之外,还有其他方法可以获取我的模型并对其进行验证吗?

我是否使用了错误的方法?

这是我的代码:

var draftModel = _draftHelper.LoadDraft(draftId);

var validationResults = new List<ValidationResult>();

var vc = new ValidationContext(draftModel, null, null);

var isValidDraft = Validator.TryValidateObject(draftModel, vc, 
                                               validationResults, true);

我得到的错误是在 TryValidateObject 行

System.NotImplementedException: The method or operation is not implemented.

最佳答案

我认为更好的方法是使用 FluentValidation ,不是万无一失的验证。我个人认为 Fluent 也比属性更好 :)。

使用 FluentValidation,您还可以在不使用 Controller 的情况下验证您的模型。

DraftVM draft = draftRepository.Get(draftId);

var DraftValidator validator = new DraftVMValidator();
ValidationResult results = validator.Validate(draft);

public class DraftVMValidator : AbstractValidator<DraftViewModel>
{
      public DraftVMValidator()
      {

         RuleFor(vm => vm.OptionalField)
            .Must(BeFilledIfNameNotEmpty)
            .WithMessage("Optional Field required because you filled out Name field");
      }


      public bool BeFilledIfNameNotEmpty(DraftVM viewModel)
      {
            return !string.IsNullOrWhiteSpace(viewModel.Name);
      }

} 

这不会给您一个 System.NotImplemented 异常。

此验证器是干式的,因为您也可以将其插入 ASP.NET MVC 验证。
您可以简单地在 Global.asax 或 App_Start 等中调用以下代码。一个验证器用于所有验证器,将其绑定(bind)到 MVC 模型验证或在任何普通应用程序中使用它。

FluentValidationModelValidatorProvider.Configure(); // This will bind it for you

如果您使用像 Ninject 这样的控制反转容器,FluentValidation 也有一个插件可以与之配合使用。在上面提供的链接中可以在他们的文档中获得更多信息。

如果您想查看此验证器而不是 FoolProof 的更多示例,我的 Github 中有一个非常大的项目示例。 Example Validators with ASP.NET MVC 4

关于asp.net-mvc - 手动触发万无一失的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349928/

相关文章:

javascript - CSS/Less 中的 Razor ?

asp.net - session 未清除

javascript - 如何从谷歌图表中删除规范/符号?

c# - 模型无效时不显示 MVC 客户端验证摘要

javascript - 添加自定义验证时出现"Sys is not defined"错误(MVC万无一失的验证)

jquery - 万无一失的RequiredIfTrue不适用于MVC5?

asp.net-mvc - 从 Azure Function 调用 SignalR

c# - 注释复杂类型时远程验证失败