2010-06-22 63 views
0

如何在自定义HtmlHelper中组成RouteLink?我知道如何在局部视图中创建它,但我想使用RouteLink在自定义的htmlhelper扩展方法中建立一个新的链接。如何做到这一点?HtmlHelper中的RouteLink?

更新:我注意到HtmlHelper.GenerateRouteLink。但是我需要作为参数放入什么?

回答

3

做下面是一个例子。让我们假设你要链接包装成一个div标签与某个给定的类,以便您生成的HTML看起来像这样:

<div class="foo"><a href="/home/index">Some text</a></div> 

你可以写下面的扩展方法:

public static class HtmlExtensions 
{ 
    public static MvcHtmlString CustomRouteLink(
     this HtmlHelper htmlHelper, 
     string className, 
     string linkText, 
     object routeValues 
    ) 
    { 
     var div = new TagBuilder("div"); 
     div.MergeAttribute("class", className); 
     div.InnerHtml = htmlHelper.RouteLink(linkText, routeValues).ToHtmlString(); 
     return MvcHtmlString.Create(div.ToString()); 
    } 
} 

可能使用像这样:

<%= Html.CustomRouteLink("foo", "Some text", 
    new { action = "index", controller = "home" }) %> 

这将产生所需的标记。如有必要,可以使用其他overloads of RouteLink

+0

谢谢。起初由于缺少使用语句,我确实遇到了一些问题,所以RouteLink并不知道,甚至Resharper也没有找到它。我现在使用了LinkExtensions RouteLink方法。 – 2010-06-23 11:44:02

1

一旦你获得了UrlHelper的实例,你应该能够做任何你想要在你的HtmlHelper方法

UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext); 
+0

我会试试看。 – 2010-06-22 14:14:33

+1

它应该是新的UrlHelper(helper.ViewContext.RequestContext); – 2010-06-22 14:25:31

+0

这似乎并没有朝着正确的方向发展。任何其他建议? – 2010-06-22 14:30:26