【发布时间】: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