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

如何在Razor页面使用无对应数据库的AcceptedTableViewModel填充表格?

解决方案

AcceptedTableViewModel作为视图模型无需对应数据库表,你需要从关联的PendingModel和AcceptedModel表中查询数据,将结果映射为AcceptedTableViewModel的集合后,再传递给Razor页面使用,具体步骤如下:

1. 配置表关联关系

先在EF Core的DbContext中定义两个表的关联规则(比如一对一/一对多,根据业务逻辑),假设AcceptedModel通过外键PendingId关联PendingModel的主键Id:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<AcceptedModel>()
        .HasOne<PendingModel>()
        .WithOne()
        .HasForeignKey<AcceptedModel>(a => a.PendingId);
}

2. 查询并映射为ViewModel集合

在Razor页面的PageModel中,通过LINQ关联两个表的数据,投影生成AcceptedTableViewModel列表:

public class YourRazorPageModel : PageModel
{
    private readonly YourDbContext _dbContext;

    public YourRazorPageModel(YourDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public List<AcceptedTableViewModel> AcceptedRecords { get; set; }

    public async Task OnGetAsync()
    {
        AcceptedRecords = await _dbContext.AcceptedModel
            .Join(
                _dbContext.PendingModel,
                accepted => accepted.PendingId,
                pending => pending.Id,
                (accepted, pending) => new AcceptedTableViewModel
                {
                    // 填充PendingModel字段
                    fName = pending.fName,
                    lName = pending.lName,
                    Unit = pending.Unit,
                    // 填充AcceptedModel字段
                    TimeAccepted = accepted.TimeAccepted,
                    TotalVotes = accepted.TotalVotes
                }
            )
            .ToListAsync();
    }
}

注:如果你的AcceptedTableViewModel是通过接口继承实现多字段复用,直接对应字段赋值即可;字段较多时可使用AutoMapper简化映射,避免手动编写投影代码。

3. 在Razor页面循环渲染表格

直接绑定PageModel中的AcceptedRecords集合,循环生成表格内容:

<table>
    <thead>
        <tr>
            <th>名</th>
            <th>姓</th>
            <th>单位</th>
            <th>受理时间</th>
            <th>总票数</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var record in Model.AcceptedRecords)
        {
            <tr>
                <td>@record.fName</td>
                <td>@record.lName</td>
                <td>@record.Unit</td>
                <td>@record.TimeAccepted</td>
                <td>@record.TotalVotes</td>
            </tr>
        }
    </tbody>
</table>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:16:06