У меня проблема, когда я пытаюсь отправить IEnumerable из вида бритвы в метод действия Controllor. Если я использую List, результат будет таким же. Я также публикую свой метод действия controllor в комментариях. В моем методе действия 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");   
            }
0
Nada Janjetovic 3 Май 2018 в 00:34

1 ответ

Лучший ответ

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

@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 и передать его в представление вместо того, чтобы использовать вашу модель из базы данных непосредственно в представлении?
0
David Liang 3 Май 2018 в 01:06