如何动态覆盖 Html.ActionLink 生成的 URL?
Posted
技术标签:
【中文标题】如何动态覆盖 Html.ActionLink 生成的 URL?【英文标题】:How can I dynamically override the URL generated by Html.ActionLink? 【发布时间】:2014-06-17 05:07:47 【问题描述】:我在现有的 ASP.NET MVC 网站中实现了一个小实用程序,它允许用户覆盖任何页面(包括带有查询字符串等的动态页面)的当前 html 标题、元描述和友好 URL。这工作得很好 - 直接访问友好网址时一切都很好。
我想做的是覆盖 Html.ActionLink 的默认行为,以便我可以检查是否为请求的操作创建了友好的 URL,如果是,则返回友好的 URL代替自动生成的 URL。
我环顾四周,找不到任何具体的东西。我知道我可以实现一个新的 HtmlHelper 并自己执行此操作,但如果可能的话,我想覆盖现有行为,而不是修改所有当前视图。
有人可以帮忙吗?
【问题讨论】:
我认为您无法更改 Html.ActionLink 的行为,除非您反向工程并重新编译 System.Web.Mvc.dll。 【参考方案1】:我认为您不能覆盖操作链接本身,但您可以创建一个扩展方法并使用它来代替操作链接帮助器
using System.Web.Mvc;
using System.Web.Mvc.Html;
public static class HtmlHelperExtensions
public static MvcHtmlString CustomActionLink(this HtmlHelper Helper, string LinkText, string ActionName)
string link = getCustomName();
if(!String.IsNullOrWhiteSpace(link))
return link
return helper.ActionLink(LinkText, ActionName);
那么在您看来,您可以将@Html.ActionLink 替换为@Html.CustomActionLink。必须将命名空间添加到每个视图的顶部,不要将其放在命名空间中,或者将其添加到配置文件中
【讨论】:
是的,这或多或少是我期望 id 最终做的事情,只是想知道是否有任何 id 遗漏,因为 id 想尽可能避免修改视图!如果事实证明这是唯一的方法,那就把它标记为答案:) 干杯! 是的,如果 ActionLink 帮助器有 EditorTemplate 或类似的东西,那就太好了,但我一直找不到。以上是关于如何动态覆盖 Html.ActionLink 生成的 URL?的主要内容,如果未能解决你的问题,请参考以下文章