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

ASP.NET Core MVC中如何实现int类型的搜索功能

新增int类型搜索能力的实现方案

方案1:无前端改动,自动兼容输入

无需修改现有前端搜索框,自动判断输入内容是否为数字,可转为int时同时匹配数字字段(如电影ID、上映年份等),无法转换时仅搜索标题。

public async Task<IActionResult> Index(string searchString)
{
    var movies = from m in _context.Movie
                 select m;

    if (!String.IsNullOrEmpty(searchString))
    {
        // 先在查询外完成int类型转换,避免EF Core翻译报错
        bool isNumeric = int.TryParse(searchString, out int searchNum);
        movies = movies.Where(s => 
            s.Title.Contains(searchString) 
            // 是数字时追加匹配int类型字段,可根据你的实际字段调整
            || (isNumeric && (s.Id == searchNum || s.ReleaseYear == searchNum))
        );
    }

    return View(await movies.ToListAsync());
}

方案2:新增搜索类型选择,匹配更精准

适合需要避免误匹配的场景,前端新增下拉框选择搜索维度,后端按选择的类型执行对应搜索逻辑。

后端代码

// 新增searchType参数接收前端的搜索类型
public async Task<IActionResult> Index(string searchString, string searchType)
{
    var movies = from m in _context.Movie
                 select m;

    if (!String.IsNullOrEmpty(searchString))
    {
        switch(searchType)
        {
            case "title":
                movies = movies.Where(s => s.Title.Contains(searchString));
                break;
            case "id":
                if(int.TryParse(searchString, out int targetId))
                {
                    movies = movies.Where(s => s.Id == targetId);
                }
                else
                {
                    // 输入不是合法int时返回空结果
                    movies = movies.Take(0);
                }
                break;
            case "releaseYear":
                if(int.TryParse(searchString, out int targetYear))
                {
                    movies = movies.Where(s => s.ReleaseYear == targetYear);
                }
                else
                {
                    movies = movies.Take(0);
                }
                break;
        }
    }

    return View(await movies.ToListAsync());
}

前端对应改动

在搜索表单中新增下拉选择框,name属性设置为searchType即可和输入框内容同步提交:

<select name="searchType">
  <option value="title">按标题搜索</option>
  <option value="id">按电影ID搜索</option>
  <option value="releaseYear">按上映年份搜索</option>
</select>

常见运行失败排查点

  • 代码中用到的int类型字段名必须和Movie实体类的属性名完全一致,比如你的年份字段名为Year就需要替换示例中的ReleaseYear
  • 不要在Where查询条件内直接调用int.Parse方法,EF Core无法将该方法翻译为SQL语句,必须提前在查询外完成类型转换
  • 类型转换失败时不要传入空值到查询条件,会触发运行时异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:54:03