验证属性被触发两次(Validation Attribute get triggered two t

2019-09-16 12:00发布

在我MVC3应用程序,我有模型(不是重要的属性删除):

public class AccountViewModel
{
    [StringLength(65)]
    public string Property1 { get; set; }

    [StringLength(65)]
    public string Property2 { get; set; }
}

问题是,当一个动作被称为submited两次验证属性,我可以得到4个错误的总结,而不是2:

'Property1' length must be less than 65 characters
'Property1' length must be less than 65 characters
'Property2' length must be less than 65 characters
'Property2' length must be less than 65 characters

我没有在我的控制器代码中使用验证方法。 这个问题似乎也与我的自定义属性,但它不具有必需属性发生。 此外,我还要注意定制的该构造函数的属性也被称为两次

我的行动

[HttpPost]
public ActionResult CreateOrEdit(AccountViewModel model) {

    if (!ModelState.IsValid) {
        return View("Edit", model);
    }

    try {
        _accountService.InsertOrUpdate(model);

    }
    catch (Exception ee) {
        ModelState.AddModelError("", ee.Message);
        return View("Edit", model);
    }

    return RedirectToAction("Index");
}

在查看我渲染用我的错误:

@{
    var errors = ViewData.ModelState.Errors();
    <div class="alert alert-block alert-error @(errors.Count == 0 ? "hide" : "")" > 
    <h4 class="alert-heading"> You got an error!</h4> 
    <ul>
        @foreach (var error in errors) {
            <li>@error</li>
        }
    </ul>
    </div>
}

我加倍重新检查一遍,ViewData.ModelState已经包含了两次错误。

Answer 1:

问题是在整合Ninject。 如果你使用Ninject.MVC包(我用的第3版),而初始化,并删除旧的它注册了自己的ModelValidationProvider:

Ninject.Web.Mvc.MvcModule

this.Kernel.Bind<ModelValidatorProvider>().To<NinjectDataAnnotationsModelValidatorProvider>();

Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin:

public void Start()
{
    ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.OfType<DataAnnotationsModelValidatorProvider>().Single());
    DependencyResolver.SetResolver(this.CreateDependencyResolver());
    RemoveDefaultAttributeFilterProvider();
}

因此,而不是创建我自己的实现的IDependencyResolver(Ninject内核封装)的我跟着这个教程 ,或者你应该删除Ninject.MVC包,并从bin文件夹中删除它的二进制文件。



文章来源: Validation Attribute get triggered two times