我正在尝试根据此处的条件创建自定义错误消息。我有日期字段,这是一个条件必填字段。我想根据某些条件制作必填字段。
我创建了一个检查这些条件的方法,如果失败则会在ModelState
中插入错误消息。
验证员类
public class Validator
{
public Dictionary<string, string> errors { get; set; }
public bool IsValid { get; set; } = true;
public Validator()
{
errors = new Dictionary<string, string>();
}
public void PatientDetailRules(PatientDetailModel model)
{
//Rule 11 - Last sight test - requried on condition
if (!model.IsFirstTest && !model.IsTestDateUnknow)
{
if (model.DateOfLastSight == DateTime.MinValue)
errors.Add(nameof(model.DateOfLastSight), "missing");
}
}
}
PatientDetailModel.cs
public class PatientDetailModel
{
[Display(Name = "OPH_GOS1_DateOfLastSight", ResourceType = typeof(Ophthalmic))]
public DateTime DateOfLastSight { get; set; }
}
控制器 - 操作方法
[HttpPost]
public ActionResult SubmitPatientDetails(PatientDetailModel Model)
{
Validator vs = new Validator();
vs.PatientDetailRules(Model);
if (!vs.IsValid)
{
foreach (KeyValuePair<string, string> errorlist in vs.errors)
ModelState.AddModelError(errorlist.Key, errorlist.Value);
}
if (ModelState.IsValid)
{
var result = Entities.Ophthalmic.DataAccess.SavePatientDetails(Model);
return Json(new { result = true }, JsonRequestBehavior.AllowGet);
}
return PartialView("~/views/Ophthalmic/Partials/_PatientDetails.cshtml", Model);
}
查看 -
<div class="col-xs-12 col-sm-12">
<div class="margin-top-10">
@Html.LabelFor(p => p.DateOfLastSight)
<div class="display-flex">
@Html.TextBoxFor(m => m.DateOfLastSight, new { @class = "form-control", autocomplete = "off", placeholder = "dd/mm/yyyy", maxlength = 8, id = "txtLastSightTestDate" })
</div>
@Html.ValidationMessageFor(model => model.DateOfLastSight, "", new { @class = "text-danger" })
</div>
</div>
但是在这里,我不确定为什么。它给出的错误是“最后的视力测试日期”。此消息来自属性“Data-val-required”,它以HTML格式生成。但是我没有在这里给出必要的字段属性。
当我在模型中使数据类型为nullable,(Datetime?)时,nits本身不会出现任何错误。
我在这里做错了什么?
编辑 - 我也尝试从资源文件中插入错误但仍无效。
if (!model.IsFirstTest && !model.IsTestDateUnknow)
{
if (model.DateOfLastSight == DateTime.MinValue)
errors.Add(nameof(model.DateOfLastSight), Resources.Ophthalmic.OPH_GOS1_DateOfLastSightMissingError);
}