Почему форматирование кода Visual Studio не работает должным образом для разметки Razor? - PullRequest
70 голосов
/ 01 августа 2011

Или, лучше спросить, когда форматирование кода VS будет работать правильно для разметки Razor? Форматирование работает для большинства структур, но кажется, что оно блокирует блоки if. Код ниже, как он отформатирован 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 имеет отступ, кроме того, что он выглядит лучше.

Ответы [ 10 ]

42 голосов
/ 02 августа 2011

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

13 голосов
/ 17 января 2013

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

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

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

на:

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

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

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

8 голосов
/ 01 августа 2011

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

5 голосов
/ 06 февраля 2013

Лучшей альтернативой здесь (вместо использования пробелов для вкладок) является изменение отступа блока для HTML и C # / VB на «Блок» вместо «Смарт».Это не полное решение, но ИМО гораздо менее болезненный обходной путь, чем использование пробелов!

4 голосов
/ 18 ноября 2016

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

3 голосов
/ 10 мая 2016

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

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

Resharper >> Параметры >> Razor >> Редактор и форматирование >> Снимите флажок «Автоформат при вводе»

2 голосов
/ 04 марта 2015

Я знаю, что это не тот ответ, который вы ищете, но я использовал 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>
0 голосов
/ 16 мая 2019

Я работаю с VS2017 15.9.2 и по-прежнему проблема.
После изменения настроек редактора, чтобы использовать пробелы вместо вкладок, поведение при редактировании (например, копирование - вставка строк кода) становится намного лучше, но "Форматировать"В документе "все еще добавляются неправильные отступы при каждом вызове.

Нет решения, но есть краткое обновление:

Похоже, что проблема в решена частично в Visual StudioВерсия 201.0 16.0 Preview 2.1
Ссылка на MS для выпуска

0 голосов
/ 06 мая 2016

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

до

**BEFORE**

ПОСЛЕ

enter image description here

0 голосов
/ 31 марта 2014

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

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