Преобразование строителя строки в tagbuilder asp.net MVC 4

Я строю HTML Helper, и он делает свою работу, но я использую StringBuilder класс для вывода следующего

<div class="panel panel-default">
    <div class="panel-heading">The Panel Title</div>
    <div class="panel-body">
        <h2><span>Content stuff</span></h2>
    </div>
</div>

Как написать MVC 4 HTML Helper, используя TagBuilder учебный класс?

2 ответа

Решение
TagBuilder span = new TagBuilder("span");
span.InnerHtml = "Content stuff";

TagBuilder heading = new TagBuilder ("h2");
heading.InnerHtml = span.ToString();

StringBuilder html = new StringBuilder();

TagBuilder div = new TagBuilder("div");
div.AddCssClass("panel-heading");
div.InnerHtml = "The Panel Title";
html.Append(div.ToString());

div = new TagBuilder("div");
div.AddCssClass("panel-body");
div.InnerHtml = heading.ToString();
html.Append(div.ToString());

div = new TagBuilder("div");
div.AddCssClass("panel panel-default");
div.InnerHtml = html.ToString();

return MvcHtmlString.Create(div.ToString());

Надеюсь, это кому-нибудь поможет. Есть расширение, для которого я написал TagBuilder для реализации сложной структуры HTML:

    var htmlFactory = new HtmlFactory(); 
    htmlFactory.Add("div")
        .Style("display", "block")
        .Class("base-item")
        .Inner(elements =>
        {
            elements.Add("span")
                .Class("header")
                .Text("Header");
            elements.Add("div")
                .Class("subheader")
                .Inner(inner =>
                {
                    inner.Add("span")
                        .Class("subheader-content")
                        .Text("SubHeader");
                });
        });

    var result = htmlFactory.ToString();

и это дает следующий результат:

<div class="base-item" style="display:block;">
    <span class="header">Header</span>
    <div class="subheader">
        <span class="subheader-content">SubHeader</span>
    </div>
</div>
Другие вопросы по тегам