使用Twitter Bootstrap在@ html.actionlink中显示html
我正在使用Twitter Bootstrap,并试图使我的链接ASP.Net MVC看起来不错。
但是,下面的链接中的<i class = …是html编码的,而不是作为html发送给浏览器:
@Html.ActionLink("<i class='icon-user icon-white'></i> Create New", "Create", "", New With {Key .class="btn btn-primary"} )
有什么办法保持<i class = …为html,以便button正确显示?
不要使用@Html.ActionLink()
,只需要自己写出<a>
标签。 您可以使用@Url.Action()
来获取HREF属性的操作的URL。
@Html
助手很好,但他们并不总是提供你需要的灵活性。
我正在处理同样的问题,但想继续使用一个帮手,因为我正在制作一个Ajaxbutton。
我结束了这两个帮手的方法,每个帮手:
public static MvcHtmlString IconActionLink(this AjaxHelper helper, string icon, string text, string actionName, string controllerName, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes) { var builder = new TagBuilder("i"); builder.MergeAttribute("class", icon); var link = helper.ActionLink("[replaceme] " + text, actionName, controllerName, routeValues, ajaxOptions, htmlAttributes).ToHtmlString(); return new MvcHtmlString(link.Replace("[replaceme]", builder.ToString())); } public static MvcHtmlString IconActionLink(this HtmlHelper helper, string icon, string text, string actionName, string controllerName, object routeValues, object htmlAttributes) { var builder = new TagBuilder("i"); builder.MergeAttribute("class", icon); var link = helper.ActionLink("[replaceme] " + text, actionName, controllerName, routeValues, htmlAttributes).ToHtmlString(); return new MvcHtmlString(link.Replace("[replaceme]", builder.ToString())); }
只要将它们放在项目中的静态类中,编译后就可以看到它们(您可能需要在页面上添加使用语句)。
当使用助手时,可以对图标string使用“icon-plus”,甚至是“icon-plus icon-white”。
3步骤解决scheme:
1.创build这个HtmlExtensions类:
using System.Web.Mvc; public static class HtmlExtensions { public static MvcHtmlString ActionButton(this HtmlHelper html, string linkText, string action, string controllerName, string iconClass) { //<a href="/@lLink.ControllerName/@lLink.ActionName" title="@lLink.LinkText"><i class="@lLink.IconClass"></i><span class="">@lLink.LinkText</span></a> var lURL = new UrlHelper(html.ViewContext.RequestContext); // build the <span class="">@lLink.LinkText</span> tag var lSpanBuilder = new TagBuilder("span"); lSpanBuilder.MergeAttribute("class", ""); lSpanBuilder.SetInnerText(linkText); string lSpanHtml = lSpanBuilder.ToString(TagRenderMode.Normal); // build the <i class="@lLink.IconClass"></i> tag var lIconBuilder = new TagBuilder("i"); lIconBuilder.MergeAttribute("class", iconClass); string lIconHtml = lIconBuilder.ToString(TagRenderMode.Normal); // build the <a href="@lLink.ControllerName/@lLink.ActionName" title="@lLink.LinkText">...</a> tag var lAnchorBuilder = new TagBuilder("a"); lAnchorBuilder.MergeAttribute("href", lURL.Action(action, controllerName)); lAnchorBuilder.InnerHtml = lIconHtml + lSpanHtml; // include the <i> and <span> tags inside string lAnchorHtml = lAnchorBuilder.ToString(TagRenderMode.Normal); return MvcHtmlString.Create(lAnchorHtml); } }
2.在你的视图中添加这个
@using Extensions
3.当你需要的时候简单的打电话
@: <li class="btn btn-mini btn-inverse"> @Html.ActionButton(lLink.LinkText, lLink.ActionName, lLink.ControllerName, lLink.IconClass)</li>
使用TwitterBootstrapMVC 。
它适用于intellisense,允许stream利的语法,你可以用它写这样的东西:
@(Html.Bootstrap().ActionLinkButton("Create New", "Create") .IconPrepend(Icons.user, true) .Style(ButtonStyle.Primary))
IconPrepend
中的参数true
为白色图标types。
此外,还有更多非常有用的帮手。
免责声明:我是TwitterBootstrapMVC的作者
使用Bootstrap 3这个库不是免费的。
@Html.ActionLink(" New", "Create", "", new { @class="icon"} )
在CSS风格:
.icon:before{ font-family: FontAwesome; content: "\f055"; }
<a href="@Url.Action("Index","Employee")" class="btn btn-primary">Index</a>
@ Html.ActionLink(“Link Title”,“ActionName”,“ControllerName”,New with {.id = Model.id}, New With {.class = Html.Raw(“btn btn-primary btn-mini”)} )
这个HTML.AcionLink重载允许你将属性添加到呈现的html中 – 记得在这个重载中为所需的parameter passingnull / nothing。
对于任何ASP.NET用户,这是如何工作对我来说:
<%: Html.ActionLink("Cancel", "Index", "Catalog_Users", new { @class = "btn btn-primary" })%>
显示的文本将是:取消。 ActionResult将是Index,Catalog_Users是控制器。
虽然这个问题很老,但我仍然提供了一个更简单的解决scheme。 起初,我觉得很难做到这一点,但这么简单。
<a href="@Url.Action("ActionMethod", "Controller",)" class="btn btn-primary"><i class="fa fa-fw fa-bar-chart-o"></i> Chart</a>
@ Url.Action()给予了与Html.ActionLink相同的权力。 看下面的图片(最上面的button就是你使用它的方式,而最下面的button是解决问题的方法。
我喜欢G Jeny Remirez的回答。 我只是想扩大一点。 使用四个argumnent actionlink来包含这个类是很重要的。 所以,如果你只是想redirect到相同的控制器,但不同的行动,它是:
@Html.ActionLink("cancel", "Index", null, new { @class = "btn" })
或者如果你想用一些参数redirect到同一个控制器:
@Html.ActionLink("Cancel", "Index", new { param1 = ViewBag.param1, input = "activity" }, new { @class = "btn" })