C# 为什么fluent.validate在asp.net mvc中引发异常
我想在发布表单时覆盖默认的asp.net-mvc验证 我创建了一个验证器类(ProjectValidator) 我把它放在应用程序_start()中 但是,当我发布使用此对象的表单时,会出现以下错误: 找不到方法:“System.Collections.Generic.IEnumerable`1 FluentValidation.IValidatorDescriptor.GetValidatorsFormMember(System.String)”C# 为什么fluent.validate在asp.net mvc中引发异常,c#,asp.net-mvc,fluentvalidation,C#,Asp.net Mvc,Fluentvalidation,我想在发布表单时覆盖默认的asp.net-mvc验证 我创建了一个验证器类(ProjectValidator) 我把它放在应用程序_start()中 但是,当我发布使用此对象的表单时,会出现以下错误: 找不到方法:“System.Collections.Generic.IEnumerable`1 FluentValidation.IValidatorDescriptor.GetValidatorsFormMember(System.String)” 有什么建议吗?这可能是与您使用的程序集版本有关
有什么建议吗?这可能是与您使用的程序集版本有关的问题。以下是使用最新版本的FluentValidation.NET和ASP.NET MVC 3的步骤:
FluentValidation.MVC3
NuGet软件包AbstractValidator
的验证器,而视图模型名为ProjectViewModel
,这是不一致的。验证器必须与视图模型相关联):
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new ProjectViewModel());
}
[HttpPost]
public ActionResult Index(ProjectViewModel model)
{
return View(model);
}
}
@model Appame.Models.ProjectViewModel
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(x => x.Application)
@Html.EditorFor(x => x.Application)
@Html.ValidationMessageFor(x => x.Application)
</div>
<div>
@Html.LabelFor(x => x.FundingType)
@Html.EditorFor(x => x.FundingType)
@Html.ValidationMessageFor(x => x.FundingType)
</div>
<div>
@Html.LabelFor(x => x.Description)
@Html.EditorFor(x => x.Description)
@Html.ValidationMessageFor(x => x.Description)
</div>
<div>
@Html.LabelFor(x => x.Name)
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
</div>
<input type="submit" value="OK" />
}
@model Appame.Models.ProjectViewModel
@使用(Html.BeginForm())
{
@LabelFor(x=>x.Application)
@EditorFor(x=>x.Application)
@Html.ValidationMessageFor(x=>x.Application)
@LabelFor(x=>x.FundingType)
@EditorFor(x=>x.FundingType)
@Html.ValidationMessageFor(x=>x.FundingType)
@LabelFor(x=>x.Description)
@EditorFor(x=>x.Description)
@Html.ValidationMessageFor(x=>x.Description)
@LabelFor(x=>x.Name)
@EditorFor(x=>x.Name)
@Html.ValidationMessageFor(x=>x.Name)
}
DataAnnotationsModelValidatorProvider
.AddImplicitRequiredAttributeForValueTypes = false;
ModelValidatorProviders.Providers.Add(
new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));
public class ProjectValidator : AbstractValidator<ProjectViewModel>
{
public ProjectValidator()
{
RuleFor(h => h.Application).NotNull().WithName("Application");
RuleFor(h => h.FundingType).NotNull().WithName("Funding Type");
RuleFor(h => h.Description).NotEmpty().WithName("Description");
RuleFor(h => h.Name).NotEmpty().WithName("Project Name");
}
}
[Validator(typeof(ProjectValidator))]
public class ProjectViewModel
{
public string Application { get; set; }
public string FundingType { get; set; }
public string Description { get; set; }
public string Name { get; set; }
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));
}
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new ProjectViewModel());
}
[HttpPost]
public ActionResult Index(ProjectViewModel model)
{
return View(model);
}
}
@model Appame.Models.ProjectViewModel
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(x => x.Application)
@Html.EditorFor(x => x.Application)
@Html.ValidationMessageFor(x => x.Application)
</div>
<div>
@Html.LabelFor(x => x.FundingType)
@Html.EditorFor(x => x.FundingType)
@Html.ValidationMessageFor(x => x.FundingType)
</div>
<div>
@Html.LabelFor(x => x.Description)
@Html.EditorFor(x => x.Description)
@Html.ValidationMessageFor(x => x.Description)
</div>
<div>
@Html.LabelFor(x => x.Name)
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
</div>
<input type="submit" value="OK" />
}