Я использую пакет nuget MVC Validation под названием MVC Foolproof Validation.
Я использую его в своей модели, чтобы установить для параметра required значение true, если другое свойство модели было пустым. Часть проверки работает, так как ModelState правильно устанавливается как недопустимое, когда поля Id и Location остаются пустыми. Проверяя ошибки в массиве ModelState, я вижу, как он работает.
Моя проблема в том, что сводка проверки на стороне клиента не отображается. Вот как я все настроил. Может ли кто-нибудь обнаружить мою проблему?
[DisplayName("Image Id")]
public string Id{ get; set; }
[DisplayName("Location Id")]
[RequiredIfEmpty("Id", ErrorMessage = "You must..etc"]
public string LocationId{ get; set; }
На мой взгляд, я настраиваю сводку проверки и входные данные следующим образом.
<div class="form-horizontal">
<hr/>
@Html.ValidationSummary(true, "", new {@class = "text-danger"})
<div class="form-group">
@Html.LabelFor(model => model.SearchCriteria.Id, htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(model => model.SearchCriteria.Id, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => model.SearchCriteria.Id, "", new {@class = "text-danger"})
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SearchCriteria.LocationId, htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(model => model.SearchCriteria.LocationId, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => model.SearchCriteria.LocationId,"", new {@class = "text-danger"})
</div>
</div>
В моем действии контроллера я проверяю состояние модели. Нужно ли вызывать ModelState.AddModelError(..). Я пробовал это, но, возможно, мне нужно это назвать.
[HttpPost]
public ActionResult Search(SearchCriteria searchCriteria)
{
var searchViewModel = new SearchViewModel
{
SearchCriteria = searchCriteria
};
if (ModelState.IsValid)
{
...
}
//ModelState.AddModelError("LocationId", "test");
return View(searchViewModel);
}
@Html.ValidationSummary(true, ..)
означает, что он исключает ошибки на уровне ресурса. Но у вас уже есть@Html.ValidationMessageFor(model => model.SearchCriteria.LocationId, ...)
, который будет отображать сообщение об ошибке в этом месте, еслиId
равноnull
и вы не укажете значение дляLocationId
. И если вы настроили это правильно, будет отображаться сообщение об ошибке, и вы даже не сможете отправить форму, если она недействительна, поэтому тот факт, что вы нажмете метод контроллера, предполагает другие проблемы. - person   schedule 15.08.2017SearchCriteria
, когда модель в вашем представлении не выглядит@model SearchCriteria
, предполагает еще больше проблем. - person   schedule 15.08.2017