mvc validationMessage не работает, пока его в IEnumerable <T> - PullRequest
0 голосов
/ 24 октября 2019

У меня есть класс:

public class Cust
{
    [Required(ErrorMessage ="NameField Req")]
    public string Name { get; set; }
}

Я использую этот класс:

public class CustModel
{
    public IEnumerable<Cust> CustList { get; set; }
}

.Chtml

@model WebApplication2.Models.CustModel

  @Html.EditorFor(m => m.CustList)
        @Html.ValidationMessageFor(val => val.CustList)

Когда янажата кнопка Отправить if (ModelState.IsValid){} работает, но почему мое сообщение об ошибке не отображается?

1 Ответ

0 голосов
/ 24 октября 2019

Мне удалось воспроизвести ваш код, исходя из вашего взгляда:

Обратите внимание на цикл for :

@model MVC_SteckOverflow.Models.ViewModels.CustModel
@using MVC_SteckOverflow.Models.ViewModels

@{
    ViewBag.Title = "ValidateIenumerable";
}

<style>
    .field-validation-error {
        color:#F00;
    }
    .input-validation-error {
        border: 1px solid red;
        background-color: #f9e2e2b3;
    }
</style>

<h2>ValidateIenumerable</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>CustModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @for (int i = 0; i != Model.CustList.Count(); i++)
            {
                @Html.EditorFor(x => x.CustList.ToList()[i].Name)
                @Html.ValidationMessageFor(x => x.CustList.ToList()[i].Name)
            }


            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section scripts{
    @Scripts.Render("~/bundles/jqueryval")
}

в соответствии со следующимДействия в контроллере:

    public ActionResult ValidateIenumerable()
    {
        CustModel custModel = new CustModel {
            CustList = new List<Cust> {
                new Cust{ Name = "A"},
                new Cust{ Name = "B"},
                new Cust{ Name = "C"},
            },
        };
        return View(custModel);
    }

    [HttpPost]
    public ActionResult ValidateIenumerable(CustModel custModel)
    {

        return View(custModel);
    }

Код, приведенный выше, протестирован, собран и успешно запущен. enter image description here

Надеюсь, это помогло ...:)

...