首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC的DefaultModelBinder不验证对象

MVC的DefaultModelBinder不验证对象
EN

Stack Overflow用户
提问于 2014-04-15 07:42:40
回答 1查看 247关注 0票数 1

我使用FluentValidation MVC5来验证对象。我跟踪了这个教程。当我发布表单时,为什么MVC DefaultModelBinder不验证对象?FluentValidationModelValidatorProvider已在global.asax中配置

Global.asax

代码语言:javascript
复制
protected void Application_Start()
{
    FluentValidationModelValidatorProvider.Configure();
}

ClientValidationEnabled和UnobtrusiveJavaScriptEnabled在web.config中被设置为真。我还下载了最新的jquery.validation包,添加到BundleConfig,并在它的视图(Create.cshtml)中添加了

代码语言:javascript
复制
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

CurrencyViewModel.cs

代码语言:javascript
复制
[Validator(typeof(CurrencyViewModelValidator))]
public class CurrencyViewModel
{
    public int CurrencyID { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
}

public class CurrencyViewModelValidator : AbstractValidator<CurrencyViewModel>
{
    public CurrencyViewModelValidator()
    {
        RuleFor(x => x.Code).Length(3);
        RuleFor(x => x.Name).Length(3, 50);
    }
}

CurrencyController.cs

代码语言:javascript
复制
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CurrencyViewModel currencyVM)
{
    if (ModelState.IsValid)
    {
        Currency currency = new Currency()
        {
            Code = currencyVM.Code,
            Name = currencyVM.Name
        };

        db.Currencies.Add(currency);
        db.SaveChanges();

        return RedirectToAction("Index");
    }

    return View(currencyVM);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-15 10:15:30

货币中的值是空的,但是ModelState.IsValid是真的,奇怪的。

这是完全正常的行为。验证器检查字符串长度,而不是检查属性是否为null。文档

确保特定字符串属性的长度在指定范围内。

如果不希望允许空值,则应使用NotNull验证器:

代码语言:javascript
复制
RuleFor(x => x.Code).NotNull().Length(3);
RuleFor(x => x.Name).NotNull().Length(3, 50);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23077470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档