构建面包屑导航时URLDecode失效问题求助
ASP.NET Core 5 MVC面包屑导航UrlDecode未生效问题解决
你的问题核心是:拼接Action + "/1"后调用System.Web.HttpUtility.UrlDecode,但最终路径仍显示/Clinic%2F1而非/Clinic/1。
原因分析
ActionLink方法会自动对传入的action名称进行URL编码——你提前用UrlDecode得到的"Clinic/1",会被ActionLink重新识别为包含特殊字符的字符串,把/再次编码为%2F,导致解码操作完全失效。
解决方案
方案1:用路由参数传递ID(推荐,符合ASP.NET Core路由规范)
ASP.NET Core路由系统支持将ID作为独立参数传递,无需手动拼接在Action名称里:
breadcrumb.AppendHtml("<li class='breadcrumb-item'>") // 修正拼写错误:breadcrimb → breadcrumb .AppendHtml(helper.ActionLink( ob.breadcrumbmap.YFVCList.YFVC.Name.Titleize(), ob.breadcrumbmap.YFVCList.YFVC.Action, // 仅传入Action名称"Clinic" ob.breadcrumbmap.YFVCList.YFVC.Controller, new { id = 1 }, // 通过路由参数传递ID null )) .AppendHtml("</li>"); // 修正标签错误:</l> → </li>
只要你的路由模板配置了{controller}/{action}/{id?}这类规则,ActionLink会自动生成/Clinic/1格式的正确URL。
方案2:直接生成完整URL并避免二次编码
如果需要手动拼接路径,可以先用Url.Action生成基础URL,再拼接ID,最后用Html.Raw输出跳过自动编码:
var baseUrl = helper.Url.Action( ob.breadcrumbmap.YFVCList.YFVC.Action, ob.breadcrumbmap.YFVCList.YFVC.Controller ); var fullUrl = $"{baseUrl}/1"; breadcrumb.AppendHtml("<li class='breadcrumb-item'>") .AppendHtml($"<a href='{fullUrl}'>{ob.breadcrumbmap.YFVCList.YFVC.Name.Titleize()}</a>") .AppendHtml("</li>");
内容的提问来源于stack exchange,提问作者user20408154
相关产品推荐
相关产品推荐

