gpt4 book ai didi

asp.net-mvc-3 - 验证属性被触发两次

转载 作者:行者123 更新时间:2023-12-04 14:38:49 27 4
gpt4 key购买 nike

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

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

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

问题是当一个 Action 被提交时验证属性被调用两次,我可以总结出 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

我没有在我的 Controller 代码中使用 Validate 方法。该问题也出现在我的自定义属性中,但它不会发生在 Required 属性中。另外我必须注意,自定义属性的 ctor 也调用了两次

我的行动

[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");
}

在 View 中,我使用以下方式呈现我的错误:

@{
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 已经两次包含错误。

最佳答案

问题在于集成 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 内核包装器)实现,而是遵循了这个 tutorial 要么你应该删除 Ninject.MVC 包并从 bin 文件夹中删除它的二进制文件。

关于asp.net-mvc-3 - 验证属性被触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10129669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com