Html Helper ValidationMessageFor с ModelState.AddModelError не отображает сообщение - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть форма, работающая с аннотациями данных для проверки некоторых полей, все работает, кроме полей, которые я проверяю на контроллере.

Я использую ModelState.AddModelError, чтобы добавить ошибку, она работает, потому что ModelState.IsValid имеет значение false, если эти поля неправильные, и true, если они в порядке. Проблема в том, что сообщение не отображается, и я не могу понять, почему ???

У меня есть это в настройках моего приложения в webconfig:

<appSettings>
   <add key="ClientValidationEnabled" value="true" />
   <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

Я звоню modelState. AddModelError внутри метода FormExtendedValidation, вызываемого методом AddItem в контроллере следующим образом:

private void FormExtendedValidation(ReportCatalogue reportCatalogue)
{
    if(reportCatalogue.Hierarchies....)
    {
        string attributeName = reportCatalogue.Hierarchies.GetType().Name;                    
        ModelState.AddModelError("ReportCatalogue." + attributeName, "Error in field ...");
    }
}

Часть модели ReportCategory со свойством Hierarchies находится здесь:

public class ReportCatalogue
{
   public Hierarchies Hierarchies { get; set; }
   ...
}

Вот метод AddItem :

[HttpPost]
public ActionResult AddItem(ReportCatalogue reportCatalogue)
{
    bool success;            

    FormExtendedValidation(reportCatalogue);

    if (ModelState.IsValid)
    {
        try
        {
            _reportCatalogueProvider.AddReportCatalogue(reportCatalogue);                    

            success = true;
        }
        catch (Exception)
        {                    
            success = false;
        }

        return Json(new { Success = success, Result = reportCatalogue }, JsonRequestBehavior.AllowGet);
    }

    return View(reportCatalogue);
}

CS html выглядит так:

<form id="reportCatalogueForm" method="post">
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.ReportCatalogue.Hierarchies,
        htmlAttributes: new { @class = "control-label col-md-6 required" })
        <div class="col-md-8">
            @Html.EditorFor(model => model.ReportCatalogue.Hierarchies,
            new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.ReportCatalogue.Hierarchies,
            "", new { @class = "text-danger" })
        </div>
    </div>
    ...
</form>
...