设置规则时具有 Fluent 验证的 MVC 视图不验证

MVC with Fluent validation when set a rule the view doesn't validate

我在我的 LoginModel 的验证器中包含了设置规则,但是当我包含此 RuleSet 时,视图未通过 jQuery Validate 进行验证。

我使用 jQuery Validate Unobtrusive。

如果我删除规则,视图将正确验证。

问题是当我在视图中包含 属性 时,razor 不包含验证规则:

@Html.TextBoxFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)

这是模型验证器 RuleSet:

public class LoginModelValidator : AbstractValidator<LoginModel>
{
    public LoginModelValidator()
    {
        RuleSet("login", () => 
        {
            RuleFor(model => model.Email)
                .NotNull()
                .EmailAddress();

            RuleFor(model => model.Password).NotNull();
        });

        /*
        RuleSet("forgotpass", () => 
        {
            RuleFor(model => model.Email)
                .NotNull()
                .EmailAddress();
        });
        */ 
    }
}

发送请求时,我根据 'Validator customization' 部分中的 documentation 在操作中包含此内容:

[CustomizeValidator(RuleSet="login")]

用于验证规则 login 并且它可以找到。问题在视图中。

编辑:在控制器中验证

public async Task<ActionResult>  Login([CustomizeValidator(RuleSet="login")] LoginModel model)
{
    if (!ModelState.IsValid)
    {
    ...

编辑:更多信息

我使用 jquery validate 来验证模型。正如我之前所描述的,如果我不包括 "ruleset" 它工作正常。

您可能已经知道了,但为了确保规则集中的验证默认情况下不会传播到客户端,除非您使用 RuleSetForClientSideMessages 或者您可以在客户端验证的规则集之外进行验证

除了@pjobs 的回答之外,如果您需要决定在操作中动态使用哪个规则集——那么您可以破解特殊的 FluentValidation 变量,正如我所描述的 here