asp.net-mvc - 流利的验证不起作用的长度

标签 asp.net-mvc asp.net-mvc-3 fluentvalidation

我正在尝试使Fluent Validation能够在我的客户端验证上正常工作。我正在使用ASP.NET MVC 3。

我有一个必填的标题,它的长度必须在1到100个字符之间。因此,当我输入标题时,将显示一条错误消息,该错误消息不在我的规则集中。这是我的规则集:

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());

最佳答案

对我来说很好。步骤如下:

  • 使用默认的Visual Studio模板
  • 创建一个新的ASP.NET MVC 3 RTM项目
  • 下载最新的FluentValidation.NET
  • 引用FluentValidation.dllFluentValidation.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");
        }
    }
    

    添加到Application_Start中:
    DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
    
    ModelValidatorProviders.Providers.Clear();
    ModelValidatorProviders.Providers.Add(
        new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));
    
    ModelMetadataProviders.Current = new FluentValidationModelMetadataProvider(
        new AttributedValidatorFactory());
    

    添加 Controller :
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new MyViewModel());
        }
    
        [HttpPost]
        public ActionResult Index(MyViewModel model)
        {
            return View(model);
        }
    }
    

    以及相应的 View :
    @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" />
    }
    

    现在尝试提交表单,将“标题”输入留空=>客户端验证开始,并显示“标题为必填”消息。现在开始输入一些文本=>错误消息消失。在输入框中输入超过5个字符后,将显示“标题必须少于或等于5个字符”的验证消息。因此,一切似乎都按预期进行。

    关于asp.net-mvc - 流利的验证不起作用的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713985/

    相关文章:

    asp.net-mvc-3 - Sitecore 6.6 和 MVC 领域

    c# - 在 MVC3 应用程序中解耦 Entity Framework

    c# - 如何表示美国各州列表

    c# - 多个相关规则 FluentValidation

    c# - 解析来自 API 的动态 jsonResult 响应给出 "object does not contain definition for X"

    c# - 在EntityFramework中保存多对多

    c# - 检查移动设备是否正在请求桌面站点

    html - ASP.NET MVC : input-validation-valid applied style not working

    javascript - 将 JavaScript var 保存到 ASP.NET MVC 3 Razor 中的 C# 模型中?

    asp.net-mvc - 在带有FluentValidation的ASP.NET MVC中使用ViewModel