Проблема с asp-validation-for при использовании в цикле - PullRequest
0 голосов
/ 20 октября 2018

У меня проблема с asp-validation-for для элемента span в приведенном ниже коде.

 <div class="form-group">
                @if (Model.Property.Options.ElementAt(i).OptionTypeId == PropertyOptionType.CheckBox)
                {
                    var ItemChecked = (Model.Property.Options.ElementAt(i).OptionValue == "on") ? " checked" : "";
                    <text><input type="checkbox" class="form-check-input" name="Options[@i].Code" id="Options[@i].Code" @ItemChecked data-val="false" />
                        <label class="form-check-label" for="Options[@i].Value">&nbsp;@(Model.Property.Options.ElementAt(i).OptionValue)</label></text>
                }
                else if (Model.Property.Options.ElementAt(i).OptionTypeId == PropertyOptionType.List)
                {
                    <label class="control-label">
                        @Model.Property.Options.ElementAt(i).OptionValue
                    </label>
                    <select class="form-control" name="Options[@i].Code"></select>
                }
                <span class="text-danger field-validation-valid" data-valmsg-replace="true" data-valmsg-for="Options.@(i).Code"></span>

Когда он отображается в HTML, он выглядит как

<span class="text-danger field-validation-valid" data-valmsg-replace="true" data-valmsg-for="Options.[3].Code"></span>

Но никакие сообщения об ошибках проверки никогда не попадают в промежуток.Они выбираются в сводке проверки на уровне страницы, когда заданы все, поэтому ненавязчивый код все работает правильно, но идентификатор диапазона разбит на квадратные скобки.

Есть идеи?Спасибо Марк

1 Ответ

0 голосов
/ 21 октября 2018

Чтобы отобразить Сводка проверки , вам необходимо указать:

@Html.ValidationSummary(false/*excludePropertyErrors?*/, "", new { @class = "text-danger" })

Для отображения сообщения об ошибке, относящейся к конкретному полю, необходимо использовать ValidationMessageFor:

@Html.EditorFor(model => model.StudentName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.StudentName, "", new { @class = "text-danger" }) 

См. Это руководство

Не создавайте диапазон проверки вручную, помощники html сделают это за вас ... вам понадобится что-то вроде этого:

@for (int i = 0; i < Model.Property.Options.Count(); i++)
{
    /* this one generates the input */
    @Html.EditorFor(m => m.Property.Options[i], new { htmlAttributes = new { @class = "form-control" } })

    /* this one generates the validation message */
    @Html.ValidationMessageFor(m => m.Property.Options[i], "", new { @class = "text-danger" })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...