You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC Razor按门店ID关联展示对应书籍数据的实现方案

解决Razor中按门店ID展示对应书籍的问题

1. 确认模型关联配置

先确保Store和Book模型的关联关系定义正确,外键与导航属性缺一不可:

// Store 模型
public class Store
{
    public int Id { get; set; }
    public string Name { get; set; }
    // 导航属性:当前门店下的所有书籍
    public ICollection<Book> Books { get; set; } = new List<Book>();
}

// Book 模型
public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }
    // 外键:关联所属门店的ID
    public int StoreId { get; set; }
    // 导航属性:所属门店
    public Store Store { get; set; }
}

2. 仓储层加载关联数据

查询门店时必须通过Include方法加载关联的书籍集合,否则视图无法获取对应数据:

public async Task<IEnumerable<Store>> GetStoresWithBooks()
{
    return await _context.Stores
        .Include(s => s.Books) // 加载每个门店对应的书籍
        .ToListAsync();
}

3. 控制器传递数据到视图

调用仓储方法获取带关联书籍的门店列表,直接传给视图:

public async Task<IActionResult> Index()
{
    var stores = await _storeRepo.GetStoresWithBooks();
    return View(stores);
}

4. 视图遍历当前门店的书籍集合

这是你之前出错的核心——不要遍历全局书籍列表,而是遍历当前store对象的Books属性:

@model IEnumerable<Store>

@foreach (var store in Model)
{
    <div class="store-container">
        <h2>@store.Name</h2>
        <div class="books-section">
            <h3>本店书籍:</h3>
            @if (store.Books.Any())
            {
                <ul>
                    @foreach (var book in store.Books)
                    {
                        <li>@book.Title</li>
                    }
                </ul>
            }
            else
            {
                <p>暂无书籍</p>
            }
        </div>
    </div>
}

额外注意事项

  • 检查数据库中Book表的StoreId字段,确保每条书籍数据都正确关联到对应的门店ID;
  • 如果使用EF Core,可在DbContext的OnModelCreating方法里显式配置关联关系(可选,避免潜在问题):
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Book>()
        .HasOne(b => b.Store)
        .WithMany(s => s.Books)
        .HasForeignKey(b => b.StoreId)
        .OnDelete(DeleteBehavior.Cascade);
}

内容的提问来源于stack exchange,提问作者loooping004

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:45:01