我正在尝试创建一个可以编辑模型及其所有子模型的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;}
}
这是我的控制器
//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参数 (我的代码有些不同,但相同的是本书的示例)
答案 0 :(得分:1)
您可以在操作请求的控制器上发布动作方法的完整代码吗?
在剃刀视图页面上的代码中,在您遍历PageList的内部循环中,您没有递增onOpenChange
。这行不应该
indexLine
是
@for(var indexLine = 0; indexLine < Model.PageList[indexPage].LineList.Count)
?
同样,在控制器上,如果Request.Form属性具有整个“假定”有效负载,但模型绑定不起作用,请尝试使用@for(var indexLine = 0; indexLine < Model.PageList[indexPage].LineList.Count, indexLine++)
注释Submission
参数以清楚地通知ASP .NET从请求的绑定中绑定[FromBody]
-像这样
Submission
仔细查看这些小补丁,让我知道您是否还有任何问题