设置规则时具有 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。
我在我的 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。