2016-12-30 6 views
0

Я создаю страницу в Razor, и я пытаюсь динамически выводить заголовки в зависимости от глубины узла.Получение заголовков HTML для динамического вывода Razor

Таким образом, узел верхнего уровня является h1, h2 второго уровня и т.д. ...

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

Это бритва:

<[email protected]{@parts} id="#@item.Id">@[email protected] @item.Name </[email protected]{@parts} > 

который выводит следующий HTML:

<h4 id="#1073">4.1.1 Get a baseline </[email protected]{@parts} > 

Если я удалить косую черту это работает, но я в конечном итоге с <h3><h3>, а не <h3></h3>.

Я также попытался:

<[email protected]{@parts} id="#@item.Id">@[email protected] @item.Name </[email protected] > 

<[email protected]{@parts} id="#@item.Id">@[email protected] @item.Name </[email protected]{parts} > 

Если я не могу получить эту работу, я думаю, мне придется прибегнуть к очень долго, если заявление, которое я предпочел бы избежать. Я думаю, что косая черта должна как-то ускользнуть? Спасибо.

+0

Что содержит переменное @parts? – Max

+0

Это число из 'var parts = sectionString.Split ('.'). Count() + 1;' Я только что обработал его и разместил ответ ниже. –

ответ

0

Работал!

<[email protected]{@parts} id="#@item.Id">@[email protected] @item.Name @Html.Raw("</h")@[email protected](">") 

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

Редактировать: приведенные ниже комментарии показывают гораздо лучший способ сделать это. Спасибо за это!

+1

Возможно, что-то вроде этого '@ Html.Raw (String.Format (" {2} {3} {4} ", parts, item.Id, sectionString, level, item.Name, parts)); 'будет выглядеть немного чище? – Max

+1

Чтобы добавить комментарий @ Max - если вы используете C# 6, вы можете сделать его еще более аккуратным с помощью интерполяции строк: 'Html.Raw ($" {sectionString} {level} {item.Name} ");' –

0

Лучше сделать помощник:

@Heading(1, (sectionString + level + item.Name), item.Id) 
@Heading(2, "Sub heading") 
@Heading(3, "Lesser heading", "anyId") 

@helper Heading(int headingLevel, string title, string id = null) 
{ 
    @if (id != null) 
    { 
     @Html.Raw(string.Format(@"<h{0} id=""{1}""", headingLevel, Html.Encode(id))) 
    } 
    else 
    { 
     @Html.Raw(string.Format("<h{0}>", headingLevel)) 
    } 
    @title 
    @Html.Raw(string.Format("</h{0}>", headingLevel)) 
}