2011-05-19 8 views
8

मैं एक @ActionLink() के पाठ के रूप में एक बटन रखना चाहते हैं, लेकिन मैं नहीं है क्योंकि यह मेरी स्ट्रिंग एचटीएमएल-निकल जाता है ... मैं @Html.Raw() प्रक्रिया प्राप्त कर सकते हैं और @ActionLink().ToHtmlString() की कोशिश की है, लेकिन कैसे को समझ नहीं सकता यह एक साथ रखा है ...कच्चे ActionLink LinkText

मैं an article है कि एक समान उद्देश्य के लिए एक विस्तार के निर्माण का वर्णन पाया लेकिन यह इतना परेशान करने के लिए जाने के लिए ... वहाँ एक आसान तरीका होना चाहिए eeky है?

उत्तर

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()); 
    } 
} 

और फिर इस सहायक का उपयोग करें:

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

जो दिया डिफ़ॉल्ट मार्गों होगा उत्पादन:

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

ओह इतना बेहतर है। काश वे सिर्फ मौजूदा विधि के लिए एक स्विच प्रदान किया होगा। मुझे लगता है कि मैं इसके लिए एक सहायक लिखना नहीं चाहता था लेकिन आपके समाधान की सुंदर रोशनी है। धन्यवाद! – ekkis

+3

हालांकि, ईमानदारी से, उस बात के लिए मैं सिर्फ 'whatever '' – ekkis

+0

यह THX मेरे लिए यह समस्या हल हो जाती, कर सकते हैं! –

1

आप एक बनाना चाहते हैं कस्टम क्रिया लिंक T4MVC पुस्तकालय का उपयोग करता है, आप नीचे दिए गए कोड लिख सकते हैं:

public static System.Web.IHtmlString DtxActionLink(
     this System.Web.Mvc.HtmlHelper html, string linkText, 
     System.Web.Mvc.ActionResult actionResult = null, 
     object htmlAttributes = null) 
    { 
     System.Web.Mvc.IT4MVCActionResult oT4MVCActionResult = 
      actionResult as System.Web.Mvc.IT4MVCActionResult; 

     if (oT4MVCActionResult == null) 
     { 
      return (null); 
     } 

     System.Web.Mvc.UrlHelper oUrlHelper = 
      new System.Web.Mvc.UrlHelper(html.ViewContext.RequestContext); 

     System.Web.Mvc.TagBuilder oTagBuilder = 
      new System.Web.Mvc.TagBuilder("a"); 

     oTagBuilder.InnerHtml = linkText; 

     oTagBuilder.AddCssClass("btn btn-default"); 

     oTagBuilder.Attributes["href"] = oUrlHelper.Action 
      (oT4MVCActionResult.Action, 
      oT4MVCActionResult.Controller, 
      oT4MVCActionResult.RouteValueDictionary); 

     oTagBuilder.MergeAttributes 
      (new System.Web.Routing.RouteValueDictionary(htmlAttributes)); 

     return (html.Raw(oTagBuilder.ToString())); 
    } 
संबंधित मुद्दे