【发布时间】:2018-11-12 10:34:49
【问题描述】:
我有这个流畅的验证规则:
public EmployeeAbsenceValidator() {
RuleFor(a => a.DateTo)
.GreaterThanOrEqualTo(a => a.DateFrom)
.WithMessage("The end date cannot be before the start date.");
}
在控制器中的 Create POST 方法中,我正在验证日期并保存到数据库,如果日期有效,我将重定向到员工的详细信息视图,如果日期有效,则返回到 create-absence-view不是:
if (ModelState.IsValid)
{
EmployeeAbsenceValidator validator = new EmployeeAbsenceValidator();
ValidationResult result = validator.Validate(employeeAbsence);
if (result.IsValid)
{
_context.Add(employeeAbsence);
await _context.SaveChangesAsync();
return RedirectToAction("Details", "Employees");
}
else
{
result.AddToModelState(ModelState, null); // Passing error message to model state
return View(employeeAbsence);
}
}
这是创建缺席视图:
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="row">
<div class="form-group col-md-4">
<label asp-for="Percentage" class="control-label"></label>
<input asp-for="Percentage" class="form-control" />
<span asp-validation-for="Percentage" class="text-danger"></span>
</div>
</div>
<div class="row">
<div class="form-group col-md-6">
<label asp-for="DateFrom" class="control-label"></label>
<input asp-for="DateFrom" class="form-control" />
<span asp-validation-for="DateFrom" class="text-danger"></span>
</div>
<div class="form-group col-md-6">
<label asp-for="DateTo" class="control-label"></label>
<input asp-for="DateTo" class="form-control" />
<span asp-validation-for="DateTo" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<button type="submit" value="Save">Save</button>
</div>
</form>
如果Percentage填写正确,且DateTo在DateFrom之前,则在日期显示fluent验证的错误信息。但如果Percentage 无效,则仅显示Percentage 上的客户端错误消息。我猜那是因为服务器不知道日期的无效性,因为表单尚未提交。我怎样才能得到这两个错误消息? (请告诉我我不需要写任何 JQuery...)
【问题讨论】:
-
你不能。您唯一能做的就是实现相同的验证客户端,是的,这需要 jQuery,因为客户端验证使用 jQuery Validation 库。
标签: c# asp.net-core fluentvalidation