2011-05-19 21 views
8

@ActionLink()'un bir metni olarak bir düğme koymak istiyorum ancak HTML-dizilimden kaçtığım için yapamıyorum ... @Html.Raw() mekanizmasını buldum ve @ActionLink().ToHtmlString()'u denedim ama nasıl olduğunu anlayamadım Birlikte koymak için ...Raw ActionLink linkText

an article buldum benzer bir amaç için bir uzantı oluşturmayı açıklar ama bu kadar çok sorun gidermek için çok kolay ... kolay bir yol olmalı?

Bir yardımcı yazabilirsiniz

cevap

13

:

public static class HtmlExtensions 
{ 
    public static IHtmlString MyActionLink(
     this HtmlHelper htmlHelper, 
     string linkText, 
     string action, 
     string controller, 
     object routeValues, 
     object htmlAttributes 
    ) 
    { 
     var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); 
     var anchor = new TagBuilder("a"); 
     anchor.InnerHtml = linkText; 
     anchor.Attributes["href"] = urlHelper.Action(action, controller, routeValues); 
     anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 
     return MvcHtmlString.Create(anchor.ToString()); 
    } 
} 

ve sonra bu yardımcıyı kullanın: Bir oluşturmak istiyorsanız

<a class="foo" href="/home/foo/123"><span>Hello World</span></a> 
+0

Bu çok daha iyi. Keşke mevcut yöntem için bir anahtar sağlamaları gerekiyordu. Sanırım bunun için bir yardımcısı yazmak istemedim ama çözümün oldukça hafif. Teşekkürler! – ekkis

+3

Ancak, dürüst olmak gerekirse, sadece whatever '' – ekkis

+0

yapabilirim. Bu sorun benim için çözüldü, thx! –

1

:

@Html.MyActionLink(
    "<span>Hello World</span>", 
    "foo", 
    "home", 
    new { id = "123" }, 
    new { @class = "foo" } 
) 

verilen varsayılan yolları üretecektir T4MVC kütüphanesini kullanan özel eylem bağlantısı, aşağıdaki kodu yazabilirsiniz: