Asp.net mvc 我必须做什么才能让FluentValidation显示我的自定义消息?
现在,它只是显示一个通用的 “缩写”不应为空 以下规则的消息:Asp.net mvc 我必须做什么才能让FluentValidation显示我的自定义消息?,asp.net-mvc,asp.net-mvc-4,fluentvalidation,Asp.net Mvc,Asp.net Mvc 4,Fluentvalidation,现在,它只是显示一个通用的 “缩写”不应为空 以下规则的消息: context.RulesFor(p => p.Initials).Required(p => p.Message("Initials are frikking required.")).Length(0, 8); initials属性在类型为applicationprofilemodel:MappedViewModel的相当大的模型中声明为普通的公共字符串initials{get;set;},甚至没有显示名称属性,但
context.RulesFor(p => p.Initials).Required(p => p.Message("Initials are frikking required.")).Length(0, 8);
initials属性在类型为applicationprofilemodel:MappedViewModel
的相当大的模型中声明为普通的公共字符串initials{get;set;}
,甚至没有显示名称属性,但即使添加显示名称,我也会遇到同样的问题
视图模型中没有必需的属性
控制器操作代码为:
[HttpGet]
public ActionResult Create()
{
var applicant = _applicantService.BuildApplicantProfile();
var model = new ApplicantProfileModel();
model.MapFromEntity(applicant);
return View(model);
}
这是我最后无数个项目的标准代码,除了FluentValidation自定义消息之外,其他一切都正常工作。他们的验证很好
意见是:
<li class="form-line">
@Html.LabelFor(m => m.Initials)
@Html.EditorFor(m => m.Initials)
@Html.ValidationMessageFor(m => m.Initials)
</li>
@LabelFor(m=>m.Initials)
@EditorFor(m=>m.Initials)
@Html.ValidationMessageFor(m=>m.Initials)
我也尝试了TextBoxFor
,但没有区别。您是否在属性上留下了[必需]
数据注释属性?我发现,如果这些规则保持打开状态,则会显示它们,而不是显示我的自定义验证规则
编辑:这就是我过去设置验证器的方式-也可能是因为您正在执行HttpGet
而不是HttpPost
,并且您需要手动调用Validate,所以验证器没有启动
public class ApplicantProfileModelValidator : AbstractValidator<ApplicantProfileModel>
{
public ApplicantProfileModelValidator()
{
RuleFor(r => r.Initials)
.NotEmpty()
.WithMessage("Initials are frikking required.");
}
}
公共类applicationProfileModelValidator:AbstractValidator
{
公共应用程序ProfileModelValidator()
{
规则(r=>r.首字母)
.NotEmpty()
.WithMessage(“需要首字母缩写”);
}
}
结果是我混淆了两个不同但非常相似的valiation库。我最初是从NuGet开始的,或者在NuGet上被称为FluentMVC。这需要您的模型实现一个名为InitializeModel(ModelContext context)
的方法,在该方法中,您可以为各种属性添加规则,例如
context.RulesFor(p => p.Id).Required(p => p.Message("Id is missing. Message may have been tampered with.").StopOnFail());
验证引擎以某种方式在所有模型上调用此方法,因为尽管指示在已验证的模型上实现imodeinitializer
接口,但我不是。这并不是说规则正在注册,但该库的某些部分处于活动状态,并且与我尝试使用的库相冲突,,在NuGet上称为FluentValidation、FluentValidation.MVC3和FluentValidation.MVC4
从我的模型中移动了InitializeModel
mehod之后,一切似乎都正常了。我粗鲁的验证测试消息现在显示出来了,这样它们就不会偷偷地通过测试和发布管理器。您的代码看起来不错。首字母
属性的类型是什么?您能给出一个完整的示例(包括模型、视图和控制器)来重现您在这里描述的问题吗?不,在该模型的任何地方都没有一个必需的。这是我使用Fluent的第一个模型。你能展示验证器的完整代码吗?这可能是你设置的方式