2010-09-14 11 views
7

içindeki görüntü ile basit html geçerli:nasıl metin olmadan Html.ActionLink yapmak ama

<%-- 
<a href="?language=de"> 
    <img src="/Images/Company/de.png" alt="Webseite auf Deutsch" style="border: 0;" /> 
</a> 
--%> 
i istiyoruz

Html.ActionLink onlardan yapmak:

<%= Html.ActionLink("", "ChangeCulture", "Account", new { lang = "de", returnUrl = this.Request.RawUrl }, new { @style = "background-image: url(/Images/Company/de.png)", @class = "languageLink" }) %> 

Ben istiyorum metinsiz linkim. işe yaramıyor, ilk parametresinde null izin verilmiyor. görüntü normal olarak kısadır. metin olmadan html.actionlink nasıl kullanabilirim?

+0

olası kopyası [ASP.NET MVC'de ActionLink eş değeri] (http://stackoverflow.com/questions/210711/image-equivalent-of-actionlink-in-asp-net-mvc) – flq

cevap

10

İşte bir çözüm.

<a href="<%= Url.RouteUrl("MyRoute", new { id = Model.Id }) %>"> 
    <img src="myimage.png" alt="My Image" />. 
</a> 

Esasen, ActionLink Metin bağlantıları için ve orada görüntüler için bir eşdeğer değil, ancak bağlantının adresini almak için Url.RouteUrl kullanabilir ve (eğer çapa içinde gibi herhangi bir HTML kodu koyabilirsiniz W3C tabii ki izin).

3

önceki SO soru (yani kapalı idi) dayalı, burada bir çözüm: orignal burada bulabilirsiniz

public static string ImageLink(this HtmlHelper htmlHelper, 
    string imgSrc, string alt, 
    string actionName, string controllerName, object routeValues, 
    object htmlAttributes, object imgHtmlAttributes) 
{ 
    UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
    string imgtag = htmlHelper.Image(imgSrc, alt, imgHtmlAttributes); 
    string url = urlHelper.Action(actionName, controllerName, routeValues); 

    TagBuilder imglink = new TagBuilder("a"); 
    imglink.MergeAttribute("href", url); 
    imglink.InnerHtml = imgtag; 
    imglink.MergeAttributes(new RouteValueDictionary(htmlAttributes), true); 

    return imglink.ToString(); 
} 

: Is there an ASP.NET MVC HtmlHelper for image links?

6

Bu şekilde en kolay (Razor kullanarak) olduğu:

<a href="@Url.Action("Action", "Controller", new { lang = "de", returnUrl = this.Request.RawUrl }, new { @style = "background-image: url(/Images/Company/de.png)", @class = "languageLink" })"><img src="myimage.png" alt="My Image" /></a> 
+0

Hayır htmlAt @ Url.Action yönteminde haraç argümanı. @ Url.Action (string actionName, string controllerName, RouteValueDictionary routeValues) olmalıdır. – Finickyflame

İlgili konular