【问题标题】:MVC with Fluent validation when set a rule the view doesn't validate设置视图不验证的规则时具有流畅验证的 MVC
【发布时间】:2015-04-02 13:52:15
【问题描述】:

我在我的 LoginModel 的验证器中包含了 set 规则,但是当我包含这个 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();
        });
        */ 
    }
}

发送请求时,我根据“验证器自定义”部分中的documentation 将其包含在操作中:

[CustomizeValidator(RuleSet="login")]

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

编辑:在控制器中验证

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

编辑:更多信息

我使用 jquery validate 来验证模型。正如我之前所描述的,如果我不包含“规则集”,它就可以正常工作。

【问题讨论】:

  • 我们可以看看你是如何在控制器中使用它的吗..?
  • @pjobs 是的,但问题出在视图中,当它尝试通过 jquery validate 进行验证时。
  • 真的不清楚你在问什么。请编辑您的问题以包含所有相关详细信息,包括视图验证、对控制器的调用以及模型中的后续验证失败。
  • 我明白你在说什么,所以除了这个规则集之外,你还有其他流畅的验证,一旦你包含这个规则集验证,这些验证就不会被执行,对吗?
  • 您可能已经知道了,但只是为了确保规则集中的验证默认不会传播到客户端,除非您使用 RuleSetForClientSideMessages 或者您可以在规则集之外进行验证以进行客户端验证

标签: c# asp.net-mvc validation razor fluentvalidation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的评论,对我很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多