Интегрировать <i> в Html.Actionlink
Как я могу интегрировать приведенный ниже код
<a href="#" class="btn btn-primary"><i class="icon-plus"></i>Add</a>
в
@Html.ActionLink("Add", "xx", "Law", new { _lawfileid = -1, baseappid = ((ObjectModelLibrary.Law)ViewData["currentLaw"]).LawID }, new { @class = "btn btn-primary icon-plus" })
Я не мог интегрироваться <i>
на Html.Actionlink.
Как я могу интегрировать <i>
на Html.Actionlink как класс?
Любая помощь будет оценена.
Благодарю.
Обновить:
HtmlHelperActionLinkExtensions Class
public static IDisposable BeginActionLink<TModel>(this HtmlHelper<TModel> htmlHelper, string actionName, string controllerName, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes)
{
return new DisposableActionLink(htmlHelper.ViewContext, () => BeginLink(htmlHelper, actionName, controllerName, routeValues, htmlAttributes), EndActionLink);
}
private static MvcHtmlString BeginLink(HtmlHelper htmlHelper, string actionName, string controllerName,
RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes)
{
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var linkTag = new TagBuilder("a");
linkTag.Attributes.Add("href", urlHelper.Action(actionName, controllerName, routeValues));
linkTag.MergeAttributes(htmlAttributes);
return MvcHtmlString.Create(linkTag.ToString(TagRenderMode.StartTag));
}
private static MvcHtmlString EndActionLink()
{
return MvcHtmlString.Create("</a>");
}
Класс DisposableActionLink
public class DisposableActionLink : IDisposable
{
private readonly TextWriter _writer;
private Func<MvcHtmlString> End { get; set; }
public DisposableActionLink(ViewContext viewContext, Func<MvcHtmlString> begin, Func<MvcHtmlString> end)
{
_writer = viewContext.Writer;
End = end;
_writer.Write(begin().ToHtmlString());
}
public void Dispose()
{
_writer.Write(End().ToHtmlString());
}
}
Посмотреть:
@using Project.Models
@Html.BeginActionLink("Add", "Law", new RouteValueDictionary { { "_lawfileid", "-1" },
{ "baseappid", ((ObjectModelLibrary.Law)ViewData["currentLaw"]).LawID } }, new
Dictionary<string, object> { { "class", "btn btn-primary icon-plus" } })
{
<i class="icon-plus"></i>Add
}
Результат Фото
Обычно значок должен быть + Добавить, однако он отображает разные вещи.
Картина
2 ответа
Самый простой способ справиться с вашей проблемой - это не использовать Html.ActionLink. Да, он не поддерживает вложенные теги, но вы можете просто сделать это:
<a href="@Url.Action("xx", "Law", new { _lawfileid = -1, baseappid = ((ObjectModelLibrary.Law)ViewData["currentLaw"]).LawID })" class="btn btn-primary icon-plus"><i class="icon-plus"></i>>Add</a>
UPD: есть еще один обходной путь. Хотя это кажется немного хакерским, "хакерская" вещь будет заключена в капсулу, так что никто не узнает:)
public class DisposableActionLink : IDisposable
{
private readonly TextWriter writer;
private Func<MvcHtmlString> End { get; set; }
public DisposableActionLink(ViewContext viewContext, Func<MvcHtmlString> begin, Func<MvcHtmlString> end)
{
writer = viewContext.Writer;
End = end;
writer.Write(begin().ToHtmlString());
}
public void Dispose()
{
writer.Write(End().ToHtmlString());
}
}
public static class HtmlHelperActionLinkExtensions
{
public static IDisposable BeginActionLink<TModel>(this HtmlHelper<TModel> htmlHelper, string actionName, string controllerName, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes)
{
return new DisposableActionLink(htmlHelper.ViewContext, () => BeginLink(htmlHelper, actionName, controllerName, routeValues, htmlAttributes), EndActionLink);
}
private static MvcHtmlString BeginLink(HtmlHelper htmlHelper, string actionName, string controllerName,
RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes)
{
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var linkTag = new TagBuilder("a");
linkTag.Attributes.Add("href", urlHelper.Action(actionName, controllerName, routeValues));
linkTag.MergeAttributes(htmlAttributes);
return MvcHtmlString.Create(linkTag.ToString(TagRenderMode.StartTag));
}
private static MvcHtmlString EndActionLink()
{
return MvcHtmlString.Create("</a>");
}
}
Так что теперь вы можете использовать его так:
@using (Html.BeginActionLink("xx", "Law", new RouteValueDictionary{{"_lawfileid", "-1"}, {"baseappid", ((ObjectModelLibrary.Law)ViewData["currentLaw"]).LawID}}, new Dictionary<string, object>{{"class", "btn btn-primary icon-plus"}})
{
<i class="icon-plus"></i>@:Add
}
@Html.ActionLink(new MvcHtmlString("<i class='icon-plus'>Add</i>").ToHtmlString(), "xx", "Law", new { _lawfileid = -1, baseappid = ((ObjectModelLibrary.Law)ViewData["currentLaw"]).LawID }, new { @class = "btn btn-primary"})
Попробуй это.