У меня есть форма, работающая с аннотациями данных для проверки некоторых полей, все работает, кроме полей, которые я проверяю на контроллере.
Я использую 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>