Бритва не понимает незакрытых тегов HTML - PullRequest
97 голосов
/ 26 января 2011

С RazorViewEngine я могу сделать это:

if (somecondition) {
     <div> some stuff </div>
}

но я не могу этого сделать (Бритва запутывается):

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

У меня есть ситуация, когда мне нужно поместить открывающие и закрывающие теги html в разные блоки кода - как я могу это сделать в Razor?

Ответы [ 4 ]

158 голосов
/ 26 января 2011

Попробуй так:

if (somecondition) {
    @:<div>
}
56 голосов
/ 17 октября 2013

Чтобы объяснить ответ Дарина, то есть добавление префикса к HTML следующим образом:

@:<html>

@: в Razor означает «отображать что-то как простой текст»

или вы можете использовать это, чтобы выводить HTML, как вы его изначально написали (это также можно использовать, чтобы избежать автоматической кодировки HTML, которую использует Razor, если вы пытаетесь вывести HTML):

@Html.Raw("<html>")

(Html.Raw ссылка от MS - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx)

4 голосов
/ 15 апреля 2012

Вы можете создать собственный метод MVC Helper. Для вас создайте открытый статический класс MyRenderHelpers в пространстве имен System.Web.Mvc.Html и напишите метод Html.

namespace System.Web.Mvc.Html
{
    public static class MyRenderHelpers
    {
        public static MvcHtmlString Html(this HtmlHelper helper, string html, bool condition)
        {
            if (condition)
                return MvcHtmlString.Create(html);
            else
                return MvcHtmlString.Empty;
        }
    }
}

Теперь вы можете использовать этот метод расширения в представлении бритвы:

@Html.Html("<div>", somecondition)
3 голосов
/ 27 января 2011

Тот факт, что вы должны это сделать, обычно указывает на то, что ваш код представления не учитывается правильно.Природа HTML состоит в том, чтобы иметь сбалансированные или замкнутые теги (по крайней мере, в HTML 4 HTML 5, кажется, отклоняется от него), и Razor зависит от этого предположения.Если вы собираетесь условно отключить <div>, то вы также где-нибудь позже выдадите </div>.Просто вставьте пару в строку if:

@if(something) {
    <div>
        Other stuff
    </div>
}

В противном случае вы получите странный код, такой как здесь .

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