C#-MVC-如何基于一个外键列出多个条目
这是我的第一篇帖子,所以我为自己的无知道歉 我试图根据所选类别ID选择链接到类别的大量项目。我知道我需要以某种方式利用模型中创建的列表,但我不确定如何使用 换句话说,我想在Category“Details”视图中列出菜单项,基于在站点上选择的类别 菜单分类模型C#-MVC-如何基于一个外键列出多个条目,c#,database,list,foreign-keys,C#,Database,List,Foreign Keys,这是我的第一篇帖子,所以我为自己的无知道歉 我试图根据所选类别ID选择链接到类别的大量项目。我知道我需要以某种方式利用模型中创建的列表,但我不确定如何使用 换句话说,我想在Category“Details”视图中列出菜单项,基于在站点上选择的类别 菜单分类模型 public class MenuCategory { public int MenuCategoryId { get; set; } public string Name
public class MenuCategory
{
public int MenuCategoryId
{
get;
set;
}
public string Name
{
get;
set;
}
public List<MenuItem> MenuItems
{
get;
set;
}
}
public class MenuItem
{
public int MenuItemId
{
get;
set;
}
public string Name
{
get;
set;
}
public string Image
{
get;
set;
}
[ForeignKey("MenuCategory")]
public int MenuCategoryId
{
get;
set;
}
public MenuCategory MenuCategory
{
get;
set;
}
}
菜单分类视图索引
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
<a asp-controller="MenuCategories" asp-action="Details" asp-route-id="@item.MenuCategoryId">
Details
</a>
</td>
</tr>
}
</tbody>
@DisplayNameFor(model=>model.Name)
@foreach(模型中的var项目){
@DisplayFor(modelItem=>item.Name)
细节
}
菜单分类详细信息视图
@model Farbucks.Models.MenuCategory
@{
ViewData["Title"] = "Details";
}
<h2>Details</h2>
<div>
<h4>MenuCategory</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Name)
</dt>
</dl>
</div>
@foreach (var item in Model.MenuItems)
{
@Html.DisplayFor(modelItem => item.Name)
}
foreach(var item in Model.MenuItems)
{
// display information of Menu item here.
}
@model Farbucks.Models.MenuCategory
@{
ViewData[“标题”]=“详细信息”;
}
细节
菜单分类
@DisplayNameFor(model=>model.Name)
@foreach(Model.MenuItems中的var项)
{
@DisplayFor(modelItem=>item.Name)
}
菜单类别控制器
{
public class MenuCategoriesController : Controller
{
private readonly ApplicationDbContext _context;
public MenuCategoriesController(ApplicationDbContext context)
{
_context = context;
}
// GET: MenuCategories
public async Task<IActionResult> Index()
{
return View(await _context.MenuCategory.ToListAsync());
}
// GET: MenuCategories/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var menuCategory = await _context.MenuCategory
.FirstOrDefaultAsync(m => m.MenuCategoryId == id);
if (menuCategory == null)
{
return NotFound();
}
return View(menuCategory);
}
}
}
{
public class MenuItemsController : Controller
{
private readonly ApplicationDbContext _context;
public MenuItemsController(ApplicationDbContext context)
{
_context = context;
}
// GET: MenuItems
public async Task<IActionResult> Index()
{
var applicationDbContext = _context.MenuItem.Include(m => m.MenuCategory);
return View(await applicationDbContext.ToListAsync());
}
// GET: MenuItems/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var menuItem = await _context.MenuItem
.Include(m => m.MenuCategory)
.FirstOrDefaultAsync(m => m.MenuItemId == id);
if (menuItem == null)
{
return NotFound();
}
return View(menuItem);
}
}
}
{
公共类菜单分类控制器:控制器
{
私有只读应用程序的bContext\u上下文;
公共菜单类别控制器(ApplicationDbContext上下文)
{
_上下文=上下文;
}
//获取:菜单分类
公共异步任务索引()
{
返回视图(wait_context.menucategray.ToListAsync());
}
//获取:菜单类别/详细信息/5
公共异步任务详细信息(int?id)
{
if(id==null)
{
返回NotFound();
}
var menuCategory=wait_context.menuCategory
.FirstOrDefaultAsync(m=>m.MenuCategoryId==id);
如果(menuCategory==null)
{
返回NotFound();
}
返回视图(菜单分类);
}
}
}
MenuItems控制器
{
public class MenuCategoriesController : Controller
{
private readonly ApplicationDbContext _context;
public MenuCategoriesController(ApplicationDbContext context)
{
_context = context;
}
// GET: MenuCategories
public async Task<IActionResult> Index()
{
return View(await _context.MenuCategory.ToListAsync());
}
// GET: MenuCategories/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var menuCategory = await _context.MenuCategory
.FirstOrDefaultAsync(m => m.MenuCategoryId == id);
if (menuCategory == null)
{
return NotFound();
}
return View(menuCategory);
}
}
}
{
public class MenuItemsController : Controller
{
private readonly ApplicationDbContext _context;
public MenuItemsController(ApplicationDbContext context)
{
_context = context;
}
// GET: MenuItems
public async Task<IActionResult> Index()
{
var applicationDbContext = _context.MenuItem.Include(m => m.MenuCategory);
return View(await applicationDbContext.ToListAsync());
}
// GET: MenuItems/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var menuItem = await _context.MenuItem
.Include(m => m.MenuCategory)
.FirstOrDefaultAsync(m => m.MenuItemId == id);
if (menuItem == null)
{
return NotFound();
}
return View(menuItem);
}
}
}
{
公共类MenuItemsController:控制器
{
私有只读应用程序的bContext\u上下文;
公共菜单项控件(ApplicationDbContext上下文)
{
_上下文=上下文;
}
//获取:菜单项
公共异步任务索引()
{
var applicationDbContext=_context.MenuItem.Include(m=>m.MenuCategory);
返回视图(等待applicationDbContext.toListSync());
}
//获取:MenuItems/Details/5
公共异步任务详细信息(int?id)
{
if(id==null)
{
返回NotFound();
}
var menuItem=wait_context.menuItem
.包括(m=>m.MenuCategory)
.FirstOrDefaultAsync(m=>m.MenuItemId==id);
if(menuItem==null)
{
返回NotFound();
}
返回视图(菜单项);
}
}
}
在菜单类别详细信息视图中,您可以使用
看起来像是下面被剪掉的:
菜单分类详细信息视图
@model Farbucks.Models.MenuCategory
@{
ViewData["Title"] = "Details";
}
<h2>Details</h2>
<div>
<h4>MenuCategory</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Name)
</dt>
</dl>
</div>
@foreach (var item in Model.MenuItems)
{
@Html.DisplayFor(modelItem => item.Name)
}
foreach(var item in Model.MenuItems)
{
// display information of Menu item here.
}
不幸的是,我现在得到一个错误,对象引用没有设置为对象的实例。我很感激你给我的东西。你编写了行动细节,我的意思是你可以在这里得到菜单项的价值。所以请告诉我你的代码。我刚刚更新了。我只是有点迷路了,抱歉。不,controller.var menuCategory=wait_context.menuCategory.Where中的操作(m=>m.MenuCategoryId==id)。选择(p=>new menuCategory{MenuItems=\u context.MenuItem.Where(p=>p.MenuCategoryId==id)。ToList(),//其余的道具})。FirstOrDefaultAsync();