Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何使用ASP.Core&;为多级子模型创建CRUD;EF?_Asp.net_Entity Framework_Razor_Asp.net Core - Fatal编程技术网

Asp.net 如何使用ASP.Core&;为多级子模型创建CRUD;EF?

Asp.net 如何使用ASP.Core&;为多级子模型创建CRUD;EF?,asp.net,entity-framework,razor,asp.net-core,Asp.net,Entity Framework,Razor,Asp.net Core,我正在尝试创建一个可以编辑模型及其所有子模型的CRUD,但每次父模型最终为空时,如何使用ASP.Core 2.2正确地执行脚手架CRUD //Models class Book { int IdBook {get; set;} string Name {getl set;} ICollection<Page> PageList {get; set;} } class Page { int IdPage {get; set;} string

我正在尝试创建一个可以编辑模型及其所有子模型的CRUD,但每次父模型最终为空时,如何使用ASP.Core 2.2正确地执行脚手架CRUD

//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;} 
}
//模型
课堂用书{
int IdBook{get;set;}
字符串名称{getl set;}
ICollection页面列表{get;set;}
}
类页{
int IdPage{get;set;}
字符串名称{get;set;}
ICollection行列表{get;set;}
}
班级线{
int IdLine{get;set;}
字符串内容{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);
}
//控制器
公共异步任务编辑(int?id)
{
var book=\u context.book
.Include(b=>b.PageList)
.然后包括(p=>p.LineList)
.First();
返回视图(书);
}
这就是我要做的

@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)
    }
}
@模型书
@型号.名称
@对于(var indexPage=0;indexPagex.PageList[indexPage].LineList[indexLine].Content)
}
}
但是当我发布表单时,我只得到
Book
的属性,而
Book.PageList
null
,正确的方法是什么?有没有我会错过的教程

更新

问题似乎是类型,控制器接收post参数 (我的代码有点不同,但都一样,书就是一个例子)


您能否在处理您的请求的控制器上发布操作方法的完整代码

从razor view页面上的代码中,在遍历PageList的内部循环中,您的索引并没有增加
索引线
。这条线不应该吗

@for(var indexLine=0;indexLine

@for(var indexLine=0;indexLine

同样,在控制器上,如果Request.Form属性具有整个“假定”负载,但模型绑定不起作用,请尝试使用
[FromBody]
注释对
提交
参数进行注释,以清楚地通知ASP.NET从请求的bofy绑定
提交
,如下所示

public async Task<IActionResult> Edit(int id, [FromBody] Submission submission) {}
public异步任务编辑(int-id,[FromBody]提交){

查看这些小补丁,如果您还有任何问题,请告诉我

如何在ctrl中创建图书?很可能它没有加载所有属性。只是正确地更新了问题视图加载,只有在form post上,孩子们才得到null我觉得生成视图时惰性加载正在工作,但当我发布到saveChanges时,惰性加载不知怎的被禁用,孩子们的属性得到null,这可能吗?对于剃须刀问题,这是我的错,错误只出现在书中的示例中,而不是我的实际代码中。对于绑定问题,我必须做一些更改,但是使用
[FromForm]
标记,我能够检索到内容,谢谢,我不知道这个技巧!