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

ASP.NET MVC如何根据选中样本展示对应样本详情数据

选中样本对应详情功能实现方案

问题根因

现在点击任意详情都显示全量数据,核心是两个逻辑漏了:

  • 列表页跳详情的时候,没把当前点击行对应的样本ID传给后端
  • 后端查结果的时候,只按当前登录用户做了过滤,没按选中的样本做筛选,自然返回用户名下所有样本的结果

分步修改代码

1. 修改列表视图的详情跳转参数

找到列表视图里foreach循环的操作列,把原来的Details跳转链接替换成下面的代码,额外传递当前行的样本ID:

@Html.ActionLink("Edit", "Edit", new { id=item.id }) |
@Html.ActionLink("Details", "Details", new { id = item.id, sampleId = item.sample.id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.id })

这里的item.sample.id就是你列表里展示的样本ID,每一行渲染的时候会自动把当前行的样本ID拼到详情链接的参数里

2. 修改Details控制器的查询逻辑

原来的Details方法只接收id参数,查询时没加样本过滤,把方法改成下面的代码:

public ActionResult Details(int id, int sampleId)
{
    int UserId = Convert.ToInt32(Session["UserID"]);
    // 先做权限校验:判断当前点击的项目是否属于当前登录用户,防止越权访问
    var currentProgram = _context.hospital_programs
        .FirstOrDefault(x => x.id == id && x.hospital_id == UserId);
    if (currentProgram == null)
    {
        return HttpNotFound();
    }

    // 查询结果时同时加两个过滤条件:属于当前用户 + 匹配当前选中的样本ID
    // 注意:下面代码里的r.sample_id要替换成你自己RESULTS表中存储样本ID的实际字段名
    var results = _context.RESULTS
        .Where(r => r.custid == UserId && r.sample_id == sampleId)
        .ToList();

    // 把当前样本的基础信息存在ViewBag里,方便详情页展示
    ViewBag.CurrentProgram = currentProgram;
    return View(results);
}

注意:如果你的RESULTS表关联样本的字段名不是sample_id,一定要换成你实际的字段名,否则会报编译错误或者查不出数据。

3. (可选)适配Details视图

如果详情页需要展示当前样本的名称等基础信息,可以直接在Details视图里读取ViewBag里存的当前项目数据,比如在页面顶部加:

<h2>样本详情:@ViewBag.CurrentProgram.sample.name</h2>

之后遍历Model(也就是筛选后的results集合)展示结果即可,页面只会返回你选中的那个样本的对应数据。


参数传递链路

整个逻辑的传参流程是:

  • 列表页渲染时,每一行的详情按钮自动携带当前行的样本ID
  • 点击详情后,浏览器把项目ID、样本ID两个参数一起发给后端Details方法
  • 后端先做权限校验,再根据传入的样本ID过滤查询结果,只返回匹配的数据
  • 前端视图只渲染后端返回的匹配结果,实现点击不同样本展示对应详情的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:40:01