在循环中使用asp-validation-for的问题

时间:2018-10-20 19:49:44

标签: asp.net-mvc unobtrusive-validation

我在以下代码中的span元素上的asp-validation-for有问题。

 <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>

但是没有验证错误消息出现在该范围内。设置为all时,它们会在页面级验证摘要中获取,因此不干扰代码的所有代码都可以正常运行,但是跨度的ID被方括号破坏。

有什么想法吗? 谢谢 标记

1 个答案:

答案 0 :(得分:0)

要显示Validation Summary,您需要包括:

@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" }) 

See this tutorial

不要手动生成验证范围,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" })
}