加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 流利的验证不适用于长度

发布时间:2020-12-16 03:57:34 所属栏目:asp.Net 来源:网络整理
导读:我试图让Fluent Validation在我的客户端验证上正常工作.我正在使用ASP.NET MVC 3. 我有一个必需的标题,它必须在1到100个字符之间.因此,当我输入标题时,会显示一条错误消息,该消息不在我的规则集中.这是我的规则集: RuleFor(x = x.Title) .NotEmpty() .WithM
我试图让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.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");
    }
}

添加到Application_Start:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(
    new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));

ModelMetadataProviders.Current = new FluentValidationModelMetadataProvider(
    new AttributedValidatorFactory());

添加控制器:

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" />
}

现在尝试提交表单,留下标题输入empty =>客户端验证启动并显示标题是必需的消息.现在开始键入一些text =>错误消息消失.在输入框中键入超过5个字符后,标题必须小于或等于5个字符,才会显示验证消息.所以一切似乎都按预期工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读