asp.net-mvc – 如何阻止ASP.Net MVC Html.ActionLink使用现有的
我正在处理的网站有一些相当复杂的路由结构,我们遇到一些困难,路由引擎使用我们需要构建URL的方式来构建URL.
我们有一个搜索结果页面,它使用基于RegEx的模式匹配将几个变量分组为单个路由段(即“www.host.com/{structuralParameters”)可以如下:“www.host.com/variableA-variableB- variableC“ – 其中变量A到C都是可选的).这对我们来说是一个很好的工作. 我们遇到的问题解决了ActionLink方法的一个令人讨厌的功能:如果您指向相同的控制器/操作,它将保留现有的路由值,无论您是否需要它们.我们更喜欢控制我们的链接的外观,在某些情况下,不能保留现有的参数.一个例子是我们的网站的主导航导致没有参数设置的搜索结果页面 – 默认搜索页面,如果你愿意的话.我说这是一个令人讨厌的功能,因为它是ASP.Net MVC框架的一个罕见的例子,似乎在没有明显的扩展点的情况下执行实现 – 我们不希望创建自定义的ActionLink代码来在我们的母版页中编写一个简单的导航链接! 我看到有人说你需要明确地将这些参数设置为空字符串,但是当我们尝试这个参数时,只需将参数从路由值更改为查询字符串参数.对我来说似乎不对,我们应该被要求明确排除我们没有作为参数显式传递给ActionLink方法的值,但是如果这是我们唯一的选择,我们将使用它.然而,目前如果它在查询字符串中显示,那么对于我们将参数直接放入路由是没有用的. 我知道我们的路由结构会使这个问题更加激化 – 如果我们使用一个更简单的方法(例如www.host.com/variableA/variableB/variableC),但是我们的URL结构是不可协商的 – 我们可能没有任何问题旨在满足与可用性,SEO和链接/内容共享有关的非常具体的需求. 我们如何使用Html.ActionLink生成到页面的链接,而不会退回当前的路由数据(或者如果可能的话,需要明确排除路由段),即使这些链接导致相同的操作方法? 如果我们确实需要明确排除路由段,我们该如何防止该方法将路由呈现为查询字符串参数? 这个看似小的问题使我们感到惊讶的是,我会感谢任何帮助解决问题. 编辑:按照LukLed的要求,下面是一个ActionLink调用示例: // I've made it generic,but this should call the Search action of the // ItemController,the text and title attribute should say "Link Text" but there // should be no parameters - or maybe just the defaults,depending on the route. // // Assume that this can be called from *any* page but should not be influenced by // the current route - some routes will be called from other sections with the same // structure/parameters. Html.ActionLink( "Link Text","Search","Item",new { },new { title = "Link Text" } ); 解决方法
调用Html.ActionLink或Html.RouteLink(或任何URL生成方法)时,将路由值设置为空或空字符串将清除“环境”路由值.
例如,使用标准的MVC controller / action / id路由,假设您处于“Home / Index / 123”.如果您调用Html.RouteLink(new {id = 456}),则MVC将注意到controller =“Home”和action =“Index”的“ambient”路由值.它还会注意到id =“123”的环境路由值,但会被显式“456”覆盖.这将导致生成的URL为“Home / Index / 456”. 参数的顺序也很重要.例如,说你叫Html.RouteLink(new {action =“About”}). “关于”操作将覆盖当前的“索引”操作,“id”参数将被完全清除!但为什么,你问?因为一旦使一个参数段无效,那么它之后的所有参数段将被无效.在这种情况下,“action”被一个新的显式值无效,因此它后面的“id”也没有明确的值也被无效.因此,生成的URL将只是“Home / About”(没有ID). 在同样的情况下,如果您调用Html.RouteLink(new {action =“”}),则生成的URL将只是“Home”,因为您使用空字符串使“action”无效,然后导致“id”也被无效,因为它是在无效的“行动”之后. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – IWebHost WebHostBuilder BuildWebHost有什
- asp.net – app_offline.htm在生产框中抛出HTTP 500错误
- asp.net – ASP MVC授权所有操作除了几个
- asp.net-core – 运行kpm restore时无法找到Microsoft.AspN
- asp.net – Visual Studio 2012不发布项目
- razor – 没有布局参考的ASP.NET默认MVC4应用程序内容页面?
- asp.net-mvc – ASP.NET MVC:如何在localhost上自动禁用[R
- asp.net-mvc-4 – 派生类型必须与基类型的安全可访问性匹配
- ASP.net MVC – 在区域之间共享部分
- asp.net – 图像按钮差距
- asp.net – 从C#代码增加Http Runtime MaxReques
- ASP.NET MVC Ajax错误返回视图而不是ajax
- asp.net – 依赖注入和代码可维护性
- asp.net – 来自ASHX处理程序的Sever.Transfer,H
- asp.net-core – ASP .NET Core 1.0 RTM本地化无
- 自动完成 – ASP.NET MVC3 Razor – 自动完成教程
- asp.net-core – .Net核心基本问题
- asp.net-mvc – 错误2002:MetadataWorkspace中不
- asp.net-mvc-3 – 如何使用Windows身份验证允许匿
- asp.net-mvc – {get;组; }在ViewModel中使用