Почему форматирование кода Visual Studio не работает должным образом для разметки Razor?



или, я должен скорее спросить, когда форматирование кода VS будет работать правильно для разметки Razor? Форматирование работает для большинства структур, но, похоже, задыхается от блоков "если". Приведенный ниже код, как он отформатирован VS. это очень легко исправить этот случай, с еще одним отступом, но я хорошо принял форматирование в повседневном использовании, и хотел бы использовать его часто для основной части моего кода, поэтому я бы предпочел избежать ручного форматирования, если это возможно. Сейчас я просто оставляю его в формате VS.



@{ 
if (User.Identity.IsAuthenticated)
{
<text>Hello </text>
@Html.Display("@ViewBag.UserName") <text> - </text>
@Html.ActionLink("Sign Out", "LogOff", "Account", null, new { style = "font-weight: bold;" })
}
}


Я думаю, что это важно для читаемости, что, например, в приведенном выше, тело блока if имеет отступ, кроме того, просто выглядит лучше.

683   9  

9 ответов:

убедитесь, что редактор использует пробелы, а не вкладки. Редактор, кажется, полностью теряет рассудок, когда используются вкладки. Это позор, потому что все эти символы пробела попадают в фактический вывод HTML, что значительно увеличивает размер передачи данных. То, что я делаю, - это вручную дополнить автоматическое форматирование по мере ввода. Не идеально, но, надеюсь, Microsoft выяснит это для следующего пакета обновления.

Я нашел одно "решение", которое позволяет вам продолжать использовать отступ табуляции и иметь правильное форматирование. Это скорее закономерность. Ключ должен использовать блоки кода бритвы вместо встроенного кода.

поэтому, например, замените следующее:

<div>
    <div>
        @if (true)
        {
            <b>Hi</b>
        }
    </div>
</div>

С:

<div>
    <div>
        @{
            if (true)
            {
                <b>Hi</b>
            }
        }
    </div>
</div>

последний формат будет правильно, но первый не будет.

имейте в виду, форматирование не идеально, но это лучше, чем раньше.

Он не работает правильно во всех случаях, потому что это сложная проблема, чтобы решить. По сути, у вас есть 3 разных редактора (HTML, C# и Razor), которые взаимодействуют с одним и тем же текстовым буфером. Есть некоторые случаи (как этот), где взаимодействия имеют ошибки. Но мы работаем над улучшением редактора для следующего выпуска Razor.

лучшей альтернативой здесь (вместо использования пробелов для вкладок) является изменение отступа блока для HTML и C#/VB на "Block" вместо "Smart". Это не полное решение, но IMO-это гораздо менее болезненная работа, чем использование пространств!

Я знаю, что это не совсем ответ, который вы ищете, но я использовал WriteLiteral, чтобы обойти мои проблемы форматирования.

например, когда я пишу:

<div>
    @foreach (var item in Model) {    
        if (condition) {
            @:</div><div>
        }
        <a href="@item.Url">@item.Label</a>
    }
</div>

в Visual Studio пытается изменить его на:

<div>
    @foreach (var item in Model) {    
        if (condition) {
            @:
        </div><div>
        }
        <a href="@item.Url">@item.Label</a>
    }
</div>

что приводит к тому, что страница выдает ошибку.

Если вы используете WriteLiteral, вы можете обмануть форматер, игнорируя строку, но это не очень красиво:

<div>
    @foreach (var item in Model) {    
        if (condition) {
            WriteLiteral("</div><div>");
        }
        <a href="@item.Url">@item.Label</a>
    }
</div>

в моем случае это был resharper переопределение параметров форматирования.

Если вы используете reshaper и получаете эту проблему, попробуйте это...

Resharper > > параметры > > Razor > > редактор и форматирование > > снимите флажок "авто-формат при вводе"

Я нашел другое решение для этого. Просто выберите весь код в файле, нажмите Shift + tab, чтобы удалить все вкладки перед кодом, скопируйте и вставьте его. Visual studio автоматически форматирует код. Работа над VS 2013 .cshtml файл

сейчас я на VS2013 ASP.NET MVC 5 и у меня все еще есть эта проблема. То, что я нашел очень полезным, - это поместить первое выражение в ту же строку, где символ открывающего блока (@{). Таким образом, форматирование кода бритвы дает гораздо лучший результат. Вот до и после случаев:

до

**BEFORE**

после

enter image description here

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

Comments

    Ничего не найдено.