I want to put a button as the text of an @ActionLink()
but I can't because it HTML-escapes my string... I found the @Html.Raw()
mechanism and have tried the @ActionLink().ToHtmlString()
but can't figure out how to put it together...
I found an article that describes building an extension for a similar purpose but it's eeky to go to that much trouble... there must be an easy way?
ActionLink(HtmlHelper, String, String, String, String, String, String, Object, Object) Returns an anchor element (a element) for the specified link text, action, controller, protocol, host name, URL fragment, route values, and HTML attributes.
ActionLink is rendered as an HTML Anchor Tag (HyperLink) and hence it produces a GET request to the Controller's Action method which cannot be used to send Model data (object). Hence in order to pass (send) Model data (object) from View to Controller using @Html.
Yes, there is a difference. Html. ActionLink generates an <a href=".."></a> tag whereas Url. Action returns only an url.
You could write a helper:
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());
}
}
and then use this helper:
@Html.MyActionLink(
"<span>Hello World</span>",
"foo",
"home",
new { id = "123" },
new { @class = "foo" }
)
which given default routes would produce:
<a class="foo" href="/home/foo/123"><span>Hello World</span></a>
If you want to create a custom action link that uses T4MVC library, You can write the below code:
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()));
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With