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

如何在ASP.NET Core MVC标签助手中添加多参数并构建筛选URL?

解决ASP.NET Core MVC中FAQ筛选的URL构建问题

第一步:配置支持筛选参数的路由

要生成你需要的URL格式,首先得在路由中定义可选的分类和主题参数。在Program.cs(ASP.NET Core 6+)里修改路由配置:

app.MapControllerRoute(
    name: "faqFilter",
    pattern: "{controller=Home}/{action=Index}/{category?}/{topic?}",
    defaults: new { controller = "Home", action = "Index" }
);

这里的?表示参数是可选的,既支持无参数的/home/index,也支持/home/index/category/technical、/home/index/topic/javascript,或是同时带两个参数的/home/index/category/technical/topic/javascript。

第二步:在控制器中接收筛选参数

在HomeController的Index方法里,接收category和topic参数用于筛选FAQ:

public IActionResult Index(string category = null, string topic = null)
{
    // 筛选逻辑:
    // - 若category和topic都为null,返回所有FAQ
    // - 若仅category有值,按分类筛选
    // - 若仅topic有值,按主题筛选
    // - 若两者都有值,同时按分类和主题筛选
    var faqs = _faqService.GetFilteredFaqs(category, topic);
    return View(faqs);
}

第三步:在视图中构建带当前筛选状态的链接

核心是保留当前已选中的筛选参数,点击新的分类/主题时叠加筛选,可通过ViewContext.RouteData获取当前路由参数:

1. 「全部FAQ」链接

直接跳转到不带任何参数的Index页面:

<a class="nav-link text-dark" asp-controller="Home" asp-action="Index">全部FAQ</a>

2. 分类链接

点击分类时,保留当前已选中的主题(如果有的话):

<!-- 示例:Technical分类链接 -->
<a class="nav-link text-dark" 
   asp-controller="Home" 
   asp-action="Index"
   asp-route-category="Technical"
   asp-route-topic="@ViewContext.RouteData.Values["topic"]">
    Technical
</a>

3. 主题链接

点击主题时,保留当前已选中的分类(如果有的话):

<!-- 示例:JavaScript主题链接 -->
<a class="nav-link text-dark" 
   asp-controller="Home" 
   asp-action="Index"
   asp-route-topic="JavaScript"
   asp-route-category="@ViewContext.RouteData.Values["category"]">
    JavaScript
</a>

补充说明

如果当前没有选中的分类/主题,@ViewContext.RouteData.Values["category"]会返回null,ASP.NET Core会自动忽略这个空参数,不会出现在URL里。若你更倾向于查询字符串格式(比如/home/index?category=Technical&topic=JavaScript),无需修改路由,直接用上述asp-route-*属性即可自动生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:15:10