Asp.net mvc Fluent验证不适用于长度
我正在尝试获得流畅的验证,以便在客户端验证中正常工作。我正在使用ASP.NETMVC3 我有一个标题是必需的,它必须在1至100个字符之间的长度。因此,当我键入标题时,会显示一条不在规则集中的错误消息。这是我的规则集:Asp.net mvc Fluent验证不适用于长度,asp.net-mvc,asp.net-mvc-3,fluentvalidation,Asp.net Mvc,Asp.net Mvc 3,Fluentvalidation,我正在尝试获得流畅的验证,以便在客户端验证中正常工作。我正在使用ASP.NETMVC3 我有一个标题是必需的,它必须在1至100个字符之间的长度。因此,当我键入标题时,会显示一条不在规则集中的错误消息。这是我的规则集: RuleFor(x => x.Title) .NotEmpty() .WithMessage("Title is required") .Length(1, 100) .WithMessage("Title must be less than or
RuleFor(x => x.Title)
.NotEmpty()
.WithMessage("Title is required")
.Length(1, 100)
.WithMessage("Title must be less than or equal to 100 characters");
以下是显示的错误消息:
Please enter a value less than or equal to 100
我不确定我做错了什么。这是我的global.asax:
// FluentValidation
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(
new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));
ModelMetadataProviders.Current = new FluentValidationModelMetadataProvider(
new AttributedValidatorFactory());
对我来说很好。以下是步骤:
FluentValidation.dll
和FluentValidation.Mvc.dll
程序集(请注意.zip中有两个文件夹:MVC2和MVC3,因此请确保选择正确的程序集)[Validator(typeof(MyViewModelValidator))]
public class MyViewModel
{
public string Title { get; set; }
}
以及相应的验证器:
public class MyViewModelValidator : AbstractValidator<MyViewModel>
{
public MyViewModelValidator()
{
RuleFor(x => x.Title)
.NotEmpty()
.WithMessage("Title is required")
.Length(1, 5)
.WithMessage("Title must be less than or equal to 5 characters");
}
}
添加控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
以及相应的观点:
@model SomeApp.Models.MyViewModel
@{
ViewBag.Title = "Home Page";
}
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.TextBoxFor(x => x.Title)
@Html.ValidationMessageFor(x => x.Title)
<input type="submit" value="OK" />
}
@model SomeApp.Models.MyViewModel
@{
ViewBag.Title=“主页”;
}
@使用(Html.BeginForm())
{
@Html.TextBoxFor(x=>x.Title)
@Html.ValidationMessageFor(x=>x.Title)
}
现在尝试提交表单,将Title输入留空=>客户端验证开始,并显示Title is required消息。现在开始输入一些文本=>错误消息消失。在输入框中键入5个以上字符后,将显示标题必须小于或等于5个字符的验证消息。所以一切似乎都按预期进行。谢谢达林。我和你一样拥有它。在Jeremy Skinner(FluentValidation)的帮助下,我发现了错误。在我的文本框中,我将maxlength属性设置为max。这错误地触发了Jquery验证触发器。@Brendan,这就是为什么在提出问题时,您应该尽可能详细地说明您的场景。如果这些细节是在源代码的形式下,那就更好了。当我回答问题时,我总是试图提供一个完整的工作源代码,以便人们可以轻松地在他们的机器上重现行为。它还允许我快速测试和模拟事物。
@model SomeApp.Models.MyViewModel
@{
ViewBag.Title = "Home Page";
}
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.TextBoxFor(x => x.Title)
@Html.ValidationMessageFor(x => x.Title)
<input type="submit" value="OK" />
}