Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Fluent验证不适用于长度_Asp.net Mvc_Asp.net Mvc 3_Fluentvalidation - Fatal编程技术网

Asp.net mvc Fluent验证不适用于长度

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

我正在尝试获得流畅的验证,以便在客户端验证中正常工作。我正在使用ASP.NETMVC3

我有一个标题是必需的,它必须在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.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" />
    }