Как создать CRUD для многоуровневой дочерней модели с ASP.Core & EF? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь создать CRUD, который может редактировать модель и все ее дочерние элементы, но каждый раз, когда родительская модель оказывается пустой, как правильно сделать CRUD в скаффолде с ASP.Core 2.2 ?

//Models

class Book {
    int IdBook {get; set;}
    string Name {getl set;}
    ICollection<Page> PageList {get; set;}
}

class Page {
    int IdPage {get; set;}
    string Name {get; set;}
    ICollection<Line> LineList {get; set;}
}

class Line{
     int IdLine {get;set;}
     string Content {get; set;} 
}

Вот мой контроллер

//Controller

public async Task<IActionResult> Edit(int? id)
{
    var book = _context.Book
                    .Include(b => b.PageList)
                    .ThenInclude(p => p.LineList)
                    .First();

    return View(book);
}

Вот что я пытаюсь сделать

@model Book

@Model.Name
@for(var indexPage = 0; indexPage < Model.PageList.Count; indexPage++)
{
    @Model.PageList[indexPage].Name
    @for(var indexLine = 0; indexLine < Model.PageList[indexPage].LineList.Count)
    {
        Html.EditorFor(x => x.PageList[indexPage].LineList[indexLine].Content)
    }
}

Но когда я публикую свою форму, я получаю только свойстваBook, а Book.PageList - это null, как правильно это сделать?Есть ли учебник, который я бы пропустил?

ОБНОВЛЕНИЕ

Проблема, кажется, типа, контроллер получает параметр post (Мой код немного отличается, но то же самое, книгибыли примеры)

bug

1 Ответ

0 голосов
/ 02 февраля 2019

Можете ли вы опубликовать весь код метода действия на контроллере, который обрабатывает ваш запрос?

Из вашего кода на странице просмотра бритвы, во внутреннем цикле, где вы перебираете PageList, вы не увеличиваетеваш indexLine.Разве эта строка

@for(var indexLine = 0; indexLine < Model.PageList[indexPage].LineList.Count) не должна быть

@for(var indexLine = 0; indexLine < Model.PageList[indexPage].LineList.Count, indexLine++)?

Опять же, На контроллере, если свойство Request.Form имеет всю «предполагаемую» полезную нагрузкуно привязка модели не работает, попробуйте аннотировать параметр Submission с помощью [FromBody] Аннотация, чтобы четко информировать ASP.NET о привязке Submission от bofy запроса - как это

public async Task<IActionResult> Edit(int id, [FromBody] Submission submission) {}

Просмотритеэти крошечные исправления и дайте мне знать, если у вас все еще есть какие-либо проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...