我正在尝试在视图中使用Html.RouteLink来生成指向另一个页面上的命名锚点的链接。 RouteLink的一些定义包括片段选项,但我试图弄清楚是否有另一种方式。
public static string RouteLink(
this HtmlHelper htmlHelper,
string linkText,
string routeName,
string protocol,
string hostName,
string fragment,
Object routeValues,
Object htmlAttributes
)
是明显的解决方案,但有点笨重似乎。我宁愿做一些像
这样的事情Html.RouteLink("Looga", new { Controller = "Cooga", Action = "Aooga", Fragment = "Fooga" })
并返回
<a href="/Cooga/Aooga#Fooga">Looga</a>
这是可能的还是我需要指定URL的每个小部分以使用内置帮助程序获取片段。我也可以像
一样手动完成<a href="<%= Url.RouteUrl(new { Controller = "Cooga", Action = "Aooga" }) %>#Fooga>Looga</a>
但似乎RouteLink应该能够更优雅地处理。
答案 0 :(得分:2)
已编辑以考虑主要帖子编辑
<德尔>
Html.RouteLink(
“Looga”,
new {Controller =“Cooga”,Action =“Aooga”},
new {Fragment =“Fooga”})
此代码将产生当前
<a href="/Cooga/Aooga" Fragment="Fooga">Looga</a>
不是你想要的。相反,你可以为RouteLink编写自己的扩展方法,就像这样......
public static class RouteLinkExtensions
{
public static string RouteLink(
this HtmlHelper htmlHelper,
string linkText,
object routeValues,
string fragment)
{
// There's probably better ways to do the implementation, but you get the idea
var url = new UrlHelper(htmlHelper.ViewContext.RequestContext);
return string.Format("<a href=\"{0}#{1}>{2}</a>",
url.RouteUrl(routeValues),
fragment,
linkText);
}
}
这将允许您在页面中使用对RouteLink的干净调用: - )
Html.RouteLink(
"Looga",
new { Controller = "Cooga", Action = "Aooga" },
"Fooga")
答案 1 :(得分:0)
+1罗素。
这是他的扩展程序的略微编辑版本,我根据自己的目的进行了更改...我想发布它以防万一。
我所做的改变:
它现在返回和Html字符串而不是字符串,以便您可以使用它直接将链接呈现到页面中。
我将其更改为接受路由名称而不是路由值对象
我也对其进行了更改,以便如果您传入的片段为空,则不会附加&#39;#&#39;
public static class HtmlHelperRouteLinkExtension
{
public static IHtmlString RouteLink(
this HtmlHelper htmlHelper,
string linkText,
string routeName,
string fragment)
{
var url = new UrlHelper(htmlHelper.ViewContext.RequestContext);
return htmlHelper.Raw(string.Format("<a href=\"{0}{1}\">{2}</a>",
url.RouteUrl(routeName),
String.IsNullOrWhiteSpace(fragment) ? "" : "#" + fragment,
linkText));
}
}