Asp.net Core MVC - при отправке формы в контроллер IEnumerable модель в действии контроллера пуста - PullRequest
0 голосов
/ 03 мая 2018

У меня проблема при попытке опубликовать IEnumerable от вида бритвы до метода действия Controllor. Также результат тот же, если я использую список. Я публикую свой метод контрольного действия также в комментарии. В моем методе контрольного действия я получил пустой список.

Это мой взгляд:

@model IEnumerable<Subject>
<form asp-action="AddNewSubjects" asp-controller="Teacher" method="post" role="form" class="form-horizontal">
    <table class="table">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Number of class</th>
                <th>Level</th>
            </tr>
        </thead>
        <tbody>
            @if (Model != null)
            {

    var item = Model.ToList();
    @for(int i=0;i<Model.Count();i++)
                {
            <tr>
                <td>@item[i].ID</td>
                <td>@item[i].Name</td>
                <td>@item[i].ClassNumber</td>
                <td>@item[i].Level</td>

            </tr>

                }
            }
        </tbody>
    </table>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-5">
            <input type="submit" class="btn btn-primary" value="Save all subjects" />
        </div>
    </div>
</form>

Это мой контроллер:

            private readonly ISubjectService _subjectService;

            public TeacherController(ISubjectService subjectService)
            {
                _subjectService= subjectService;
            }

     [HttpPost]
            public IActionResult AddNewSubjects(IEnumerable<Subject> subjects)
            {
                var newSubjects= (from p in subjects
                                    where p.State== Status.New
                                    select p);
                    var result = _subjectService.SaveTeacherSubjects(newSubjects);
                return View("ProfesorPages");   
            }

1 Ответ

0 голосов
/ 03 мая 2018

Понятия не имею, что вы пытаетесь сделать здесь. Ваша форма не имеет никакого элемента ввода, кроме кнопки отправки. Конечно, вы не видите ничего отправленного обратно.

@model IEnumerable<Subject>

<form>
    ...
    <tbody>
        @for(int i = 0; i < Model.Count(); i++)
        {
            <tr>
                <td>
                    <input type="hidden" asp-for="Model[i].ID" />
                </td>
                <td>
                    <input type="text" asp-for="Model[i].Name" />
                </td>
                ...
            </tr>
        }
    </tbody>
    ...
</form>

Почему ??

  • Почему вы преобразовали свой IEnumerable в список с именем item? Почему бы просто не перечислить ваши предметы напрямую?
  • Почему бы не создать другой набор моделей с именем ViewModel и передать его в View вместо использования вашей модели из базы данных непосредственно в View?
...