2012-01-26 42 views
0

创建ActionImage这是一个跟进我刚才的问题:How do you map areas on icon set to buttons?如何从一个CSS雪碧

我决定把我自己的HtmlHelper扩展,以创建一个ActionImage链接,所以我拆解一些流行的扩展张贴在SO和得到这个:

// Controller/Action Image Link 
public static MvcHtmlString ActionImage(this HtmlHelper html, 
    string controller, string action, object routeValues, 
    string imageSrc, string alternateText, object imageAttributes) 
{ 
    UrlHelper url = new UrlHelper(html.ViewContext.RequestContext); 

    // build the <img> tag 
    TagBuilder imgBuilder = new TagBuilder("img"); 
    imgBuilder.MergeAttribute("src", url.Content(imageSrc)); 
    imgBuilder.MergeAttribute("alternateText", alternateText); 
    string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing); 

    // build the <a> tag 
    TagBuilder anchorBuilder = new TagBuilder("a"); 
    anchorBuilder.MergeAttribute("href", url.Action(action, controller, routeValues)); 
    anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside 
    string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal); 

    return MvcHtmlString.Create(anchorHtml); 
} 

现在的问题是,我有一个CSS雪碧用,我不知道如何使它与ActionImage扩展方法工作:

@Html.ActionImage("Account", "LogOn", null, Sprite.Image("~/App_Sprites/twitterlogin.png"), "", null) 

我试着调用精灵的ToString()方法,但它不返回URL。是否有另一种方法来实现这一点?

回答

2

你可以只的路径传递给精灵:

@Html.ActionImage(
    "Account", 
    "LogOn", 
    null, 
    "~/App_Sprites/twitterlogin.png", 
    "", 
    null 
) 

,然后让助手取使用Sprite.Image辅助生成图像的护理:

public static MvcHtmlString ActionImage(this HtmlHelper html, 
    string controller, string action, object routeValues, 
    string imageSrc, string alternateText, object imageAttributes) 
{ 
    UrlHelper url = new UrlHelper(html.ViewContext.RequestContext); 

    // build the <img> tag 
    string img = Sprite.Image(imageSrc).ToHtmlString(); 

    // build the <a> tag 
    TagBuilder anchorBuilder = new TagBuilder("a"); 
    anchorBuilder.MergeAttribute("href", url.Action(action, controller, routeValues)); 
    anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside 
    string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal); 

    return MvcHtmlString.Create(anchorHtml); 
} 
+0

这做到了!梅尔西:) – Kiril