Razor не понимает закрытые теги html

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

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

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

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

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

Ответ 1

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

if (somecondition) {
    @:<div>
}

Ответ 2

Чтобы объяснить ответ Дарина, то есть префикс 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)

Ответ 3

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

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

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

Ответ 4

Вы можете создать собственный метод 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)