Создание метода расширения для HtmlHelper, который выполняет действие <T>, вызывающее проблемы с автоматическим форматированием в VS 2017 - PullRequest
0 голосов
/ 25 июня 2018

Текущий код

Я создал метод расширения для HtmlHelper, который определяется следующим образом:

public static IHtmlString MyMethod(this HtmlHelper helper, Action<MyClass> action)
{
    MyClass settings = new MyClass();
    action(settings);
    // Here I can now use the settings as defined in razor view.
}

Цель создания метода расширения таким образом, чтобы я мог вызвать его, разрешив определить класс MyClass в виде бритвы следующим образом:

<div>
    @Html.MyMethod(settings =>
    {
        settings.SomeFunction(1, 2, 3);
    })
</div>

Проблема

Теперь это прекрасно работает и делает именно то, что я ожидаю. Однако проблема 1 заключается в том, что каждый раз, когда я выполняю «Формат документа» (Ctrl + E, D) в Visual Studio, все строки после первой строки получают отступ в другую вкладку. Просто чтобы прояснить, после форматирования документа 4 раза это будет выглядеть примерно так:

<div>
    @Html.MyMethod(settings =>
                    {
                        settings.SomeFunction(1, 2, 3);
                    })
</div>

Кажется, что проблема возникает только при использовании внутри элемента (в этом примере div). Но это то, что мне нужно было бы использовать.

Ввиду того, что я часто изменяю, это не займет много времени, пока я автоматически отформатирую их за пределами видимого пространства экрана. Затем мне нужно вручную переместить их обратно. Излишне говорить, что это очень раздражает, особенно при многократном использовании в одном представлении.

В настоящее время я использую Visual Studio 2017, я не уверен, существует ли эта проблема в предыдущих версиях или нет.

Что я пробовал

Я пробовал разные способы написания кода, пытаясь остановить его, но он всегда форматирует к одной и той же проблеме. Так, например, я переместил settings на вторую строку, переместил отверстие { на первую строку. Ничто не похоже на работу. Пара примеров:

@Html.MyMethod(
settings =>
{
    settings.SomeFunction(1, 2, 3);
})

@Html.MyMethod(settings => {
    settings.SomeFunction(1, 2, 3);
})

Вопрос

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


Просто замечание, для любого, кто использовал библиотеку DevExpress MVC, которая допускает аналогичную функциональность, но почему-то не страдает от этой конкретной проблемы. Хотя я не знаю, что они сделали по-другому, я просто знаю, что эта функциональность должна быть достижимой, не вызывая проблемы с форматированием.

1 Ответ

0 голосов
/ 25 июня 2018

Форматер для файлов Razor ужасен.Проблемы, о которых вы говорите, кажутся довольно умеренными - они могут стать намного хуже.Это давняя проблема, которая возникла еще до MVC;форматер для страниц ASPX был таким же плохим.

Файлы Razor представляют собой смесь из 5 языков, каждый из которых имеет свои потребности в форматировании:

  • HTML
  • CSS
  • JavaScript
  • C # или Visual Basic
  • Razor

Возможно, простительно, что Microsoft не имеет права форматирования в каждой ситуации.На самом деле я думаю, что они отказались от попыток.

Чтобы исправить проблемы с форматированием, я бы посоветовал нажать Control-Z сразу после того, как он неправильно отформатировал.Это отменит форматирование без отмены изменения, которое его вызвало.

...