ASP.NET中asp-action助手绑定Index动作失效问题求助
解决Razor Tag Helper省略Index动作的问题
嘿,这事儿我太熟了!ASP.NET Core的路由系统就是这么设计的——它默认把Index当作控制器的默认动作,所以当你用asp-action="Index"的时候,路由引擎会自动省略这部分,因为它匹配了默认路由模板里的{action=Index}规则(就是那个等号后面的默认值)。
如果一定要让链接里显示/Index,给你几个靠谱的方案:
方案一:给Index动作添加显式路由
在你的Index()方法上加上[Route]特性,强制指定路由路径:[HttpGet] [Route("TrainingOfficer/Index")] public ActionResult Index() { // 执行操作,返回视图 }这样再用你的Tag Helper代码生成的链接,就会完整显示
/TrainingOfficer/Index了。方案二:手动写死URL(不推荐,除非路由不会变)
直接放弃Tag Helper,硬编码href:<a class="nav-link" href="/TrainingOfficer/Index">Training</a>缺点是以后如果控制器名或者路由规则改了,你得手动改所有地方,不够灵活。
方案三:修改全局默认路由(谨慎使用)
如果你整个应用都不需要默认动作的话,可以去Program.cs(或者Startup.cs)里修改路由配置,把默认动作的默认值去掉:app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action}/{id?}");但这样会影响所有控制器,比如访问
/Home会直接404,必须要写/Home/Index,所以除非你确定要这么做,否则别轻易改。
其实多说一句,这个默认行为是符合常规Web开发规范的,一般情况下不需要显示Index,但如果你的业务有特殊要求,上面的方案肯定能解决你的问题。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

