2012-01-26 66 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