asp.net-mvc-3 – Url.Action没有给出预期的结果.不需要的路线值仍然存在
我有一个MVC3应用程序与几个路线.其中两个定义如下: routes.MapRoute( null,"System/{name}",// URL with parameters new { controller = "Systems",action = "Index" } // Parameter defaults ); routes.MapRoute( null,"Carrier/{name}",// URL with parameters new { controller = "Carriers",action = "Index" } // Parameter defaults ); 现在,在我的菜单中,我有两个指向使用Url.Action创建的路径的链接: Url.Action("Index","Systems") Url.Action("Index","Carriers") 现在,当我启动应用程序时,一切似乎都很好,菜单中的链接显示为/ System /和/ Carrier /,这是预期的值. 但是,当我在网页中浏览例如/ System / MySystem时,我仍然希望链接指向同一个地方,但现在他们指向/ System / MySystem和/ Carrier / MySystem. 我已经尝试了很多东西来保持链接不使用路由值中的名称,但无济于事.我遇到的最奇怪的情况是我试过这个: Url.Action("Index","Systems",new{name = (string)null}) 现在链接显示为 /System?name=MySystem 有没有什么好方法可以确保路由值中的名称值不会以任何方式干扰这些链接? 解决方法你注意到了Url.帮助程序重用先前给定的路由参数.作为一种解决方法(我希望有一个更优雅的解决方案……),您可以从视图中的RouteData.Values中删除名称条目: 所以在你的视图中给你调用Url.Action之前: Url.Action("Index","Carriers") 从RequestContext中删除预填充名称: @{ Request.RequestContext.RouteData.Values.Remove("name"); } 这也是一种解决方法,但如果您通过为您的名称段提供默认空值来稍微修改您的路线: routes.MapRoute( null,action = "Index",name = (string)null } ); routes.MapRoute( null,name = (string)null } ); 您的原始解决方案(“归零”Url.Action中的名称)也将起作用: @Url.Action("Index",new {name = (string)null} ) (编辑:鲜蔬坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 我怎么知道我的应用程序中是否需要“WCF HTTP激
- asp.net-mvc – 所有请求获取HTTP错误401.2 – 未经授权的响
- 如何为Asp.Net中的所有子文件夹注册HttpHandler?
- asp.net-mvc-4 – 如何防止复杂类型的默认绑定器?
- asp.net-core – ASP.Net核心maxUrlLength
- asp.net-mvc-4 – 如何在asp.net MVC4查看页面中包含javasc
- 在IIS / ASP.Net中的.NET 1.1应用程序中创建.NET 3.0子应用
- asp.net – 我可以愚弄HttpRequest.Current.Request.IsLoca
- asp.net-mvc – URL中的ASP.NET MVC冒号
- ASP.NET页面验证
- 来自ASP.NET MVC站点的“无效的JSON原语:alihac
- asp.net-mvc – 为什么我的视图模型中的内部成员
- Asp.Net GridView删除Html样式
- asp.net – 来自WebHttpBinding的WCF服务中的Acc
- 实体框架 – 实体框架核心更新许多对许多
- asp.net-mvc – 从视图到控制器POST信用卡数据是
- ASP.NET如何确定是否排队请求?
- asp.net – 在WebForms中调试时关闭捆绑/缩小
- asp.net-mvc – ASP.net MVC:在RenderAction中获
- asp.net-mvc-3 – 使用自定义VirtualPathProvide