ASP.NET MVC - 基于条件的自定义错误消息

时间:2017-08-11 05:06:28

标签: c# asp.net-mvc data-annotations

我正在尝试根据此处的条件创建自定义错误消息。我有日期字段,这是一个条件必填字段。我想根据某些条件制作必填字段。

我创建了一个检查这些条件的方法,如果失败则会在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);
        }

0 个答案:

没有答案