gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:05:25 24 4
gpt4 key购买 nike

我正在使用 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/

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