Как создать вложенные теги <ul><li> с помощью HtmlTags (FubuMVC) - PullRequest
1 голос
/ 09 октября 2011

У меня нет предыдущего опыта работы с библиотекой FubuMVC HtmlTags, и я просто застрял при попытке создать простую вложенную структуру, подобную этой:

<ul>
 <li>text</li>
 <li>text
   <ul>
     <li>subtext</li>
     <li>subtext</li>
   </ul>
 </li>
 <li>text</li>
</ul>

Вот как у меня это получается при построении строки:

public static HtmlString ChildNodesRecursive(DocumentNode documentNode)        
{
    var tag="";
    if (documentNode.Children.Count > 0)
    {
        tag = "<ul>";
        foreach (var c in documentNode.Children)
        {
            tag += "<li>" + c.Name;
            tag += ChildNodesRecursive(c);
            tag += "</li>";
        }
        tag += "</ul>";
    }
    return new HtmlString(tag);
}

Работает нормально, но мне нравится использовать библиотеку HtmlTags (за пределами FubuMvc, с отдельным Nuget для HtmlTags).

Редактировать: я получил вдохновение от обоих ответов и нашел то, что мне нужно,Вот код, который я использовал в итоге.

    public static HtmlTags.HtmlTag ChildNodesRecursiveHtmlTag(DocumentNode documentNode)
    {
        var ul = new HtmlTags.HtmlTag("ul");
        foreach (var c in documentNode.Children)
        {
            var li = new HtmlTags.HtmlTag("li");
            li.Add("a").Attr("href",c.ContextFullPath).Text(c.Name);
            if (c.Children.Count > 0)
            {
                li.Children.Add(ChildNodesRecursiveHtmlTag(c));
            }
            ul.Children.Add(li);
        }
        return ul;
    }

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Я могу привести вам пример, который может прояснить ситуацию:

var ul = new HtmlTag("span").AddClass("form_input");
ul.Modify(t =>
{
           foreach (var value in choice)
           {
               t.Add("input")
                   .Attr("type", "radio")
                   .Attr("name", request.Accessor.Name)
                   .Attr("value", value)
                 .Add("span")
                   .AddClass("fixed-width")
                   .Text(value);
           }
});

Дает вам что-то вроде

<span class="form-input">
  <input type="radio" name="bla" value="foo" />
  <span class="fixed-width">foo</span>
  ...etc...
</span>

Вы можете продолжить вложение тегов с изменением и заполнением лямбды. Я думаю, вы обнаружите, что то, что вы хотите сделать, возможно с показанными битами синтаксиса.

1 голос
/ 09 октября 2011

Этот код:

var root = new HtmlTags.HtmlTag("ul");
root.Add("li").Text("item1");
var child = root.Add("ul");
child.Add("li").Text("item2");
return root.ToPrettyString();

производит следующий вывод:

<ul>
  <li>item1</li><ul>
    <li>item2</li>
  </ul>
</ul>
...