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

ASP.NET MVC中如何将下拉选框的Category ID传递到控制器实现筛选功能

解决ASP.NET MVC中下拉选框传递分类ID到控制器的问题

你遇到的问题主要出在参数匹配和值绑定两个地方,咱们一步步来修复:

问题核心分析

  1. 参数名称不匹配:下拉选框的name属性是category,但控制器方法的参数是cid,ASP.NET MVC的模型绑定无法识别这两个不匹配的名称,导致参数接收不到值。
  2. Option值绑定错误:你把option的value写死成了字符串"category.Name",而不是动态绑定分类的Id值,这就导致提交的不是实际分类ID,而是固定字符串。

修复步骤

1. 修改视图文件(Index.cshtml)

把下拉选框的name改成和控制器参数一致的cid,同时把option的value绑定到category.Id:

<form asp-controller="Getjob" asp-action="viewJob">
  <select name="cid" class="form-control">
    <option value="0">Choose Category</option>
    @foreach (var category in Model.ListB) {
      <option value="@category.Id">@Html.DisplayFor(modelItem => category.Name)</option>
    }
  </select>
  <br><br>
  <input type="submit" class="btn btn-lg btn-success" value="FIND">
</form>

2. 优化控制器方法(可选但推荐)

你当前的筛选逻辑可以用EF Core的Linq查询直接优化,避免先加载所有数据到内存再循环筛选,性能更优:

[HttpPost]
public IActionResult viewJob(int cid)
{
    // 处理用户未选择分类的场景(cid为0)
    if (cid == 0)
    {
        using (var db = new JobportalContext())
        {
            var allJobs = db.Jobs.ToList();
            return View(allJobs);
        }
    }
    
    using (var db = new JobportalContext())
    {
        // 直接在数据库层面完成筛选,减少内存占用
        var jobsFiltered = db.Jobs.Where(j => j.Cid == cid).ToList();
        return View(jobsFiltered);
    }
}

修改说明

  • 表单元素的name属性必须和控制器参数名一致,这样ASP.NET MVC的模型绑定才能正确将提交的值映射到参数上。
  • @category.Id会动态渲染每个分类的实际ID值,确保提交的是正确的分类标识,而不是固定字符串。

这样修改后,当用户选择分类并点击FIND按钮,控制器就能正确接收到分类的Id值,顺利完成筛选功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:33:11