Visual Studio 格式不适用于 Control + K+D 和多行

Posted

技术标签:

【中文标题】Visual Studio 格式不适用于 Control + K+D 和多行【英文标题】:Visual Studio formatting doesn't work with Control + K+D and multiline 【发布时间】:2018-07-11 02:50:15 【问题描述】:

我正在使用 Telerik 的 UI for ASP.NET 小部件。这些小部件中的大多数都有多个配置选项。在.cshtml 文件中,我在多行上配置这些小部件以提高可读性。 例如下面是 Grid 小部件的配置。

<div class="row">
    <div class="col-md-12">
        @(Html.Kendo().Grid<ResultModel>()
            .Name("SearchGrid")            
            .Columns(col =>
            
                col.Bound(p => p.DocumentID);
                col.Bound(p => p.UploadDate);
                col.Bound(p => p.DocumentType);
                col.Bound(p => p.ProcessStatus);                
                col.Bound(p => p.StateProvince);
                col.Bound(p => p.Error);                
                col.Bound(p => p.Notes);
            )
            .AutoBind(false)
            .Pageable()
            .Sortable()
            .Resizable(resize => resize.Columns(true))
            .Scrollable()
            .Sortable(sortable => sortable
                .AllowUnsort(true)
                .SortMode(GridSortMode.MultipleColumn))
            .DataSource(dataSource => dataSource
                .Ajax()
                .PageSize(50)
                .ServerOperation(true)
                .Read(read => read.Action("Search", "Search"))
       ).Deferred())
    </div>
</div>

编辑 cshtml 文件后,我按Control + K + D 自动格式化。 Visual Studio 正确格式化 html 和一行中配置的任何内容。但是在多行上配置的任何小部件都会缩进一个选项卡。因此,在上述情况下,从 .Name("SearchGrid")).Deferred())) 的所有内容都会缩进一个制表符。

问题是每次我编辑 cshtml 时,我都会按 Control + K + D 来格式化编辑后的 ​​cshtml,但这会导致所有其他小部件缩进一个标签。最终所有这些小部件都移动到页面的最右侧

【问题讨论】:

是的,这很烦人。我希望我能以某种方式放置一个指示器或其他东西来不重新格式化某些代码块。 @SteveGreene 我没有收到任何人的任何回复,所以我认为我是唯一遇到这个烦人问题的人:) 我发现如果我在剑道小部件中添加一些东西,它会自动格式化,所以我养成了立即执行 CTRL-Z 的习惯,它会撤消格式化,但会留下我的更改。检查 resharper 是否有帮助。 有人找到解决方案了吗?实在是太烦人了。 是的,自从我上次使用 Telerik 控件大约 4 年前以来,这一直是个问题。 2018 年似乎还在继续:-/ 【参考方案1】:

我找到了解决方案。多行剑道剃刀在@后使用,不受多个Control + k + d的影响。

@
(Html.Kendo().DropDownList()
.Name("animatorEntityDropDownList")
.DataTextField("EntityName")
.DataValueField("EntityID")
.OptionLabel("- Select -")
.Events(e =>

e.Select("onSelectAnimatorEntityDropDownList");
)
.HtmlAttributes(new  style = "width:300px" ))

【讨论】:

我也没有,代码没有显示任何错误,但是当我加载页面时,网格没有显示。 @HunterNelson 解决方案即将在 VS 2019 中推出 developercommunity.visualstudio.com/content/problem/323902/…【参考方案2】:

如果你使用非渲染代码块,你应该调用 Render 方法。

@
    Html.Kendo().NumericTextBox()
        .Name("myTextbox").Format("#")
        .Render();

当您自动格式化文档时,VS 2017 不会缩进非渲染代码块中的行。 (大括号)

@(
    Html.Kendo().NumericTextBox()
        .Name("myTextbox").Format("#")
)

当您自动格式化文档时,VS 2017 将缩进常规块中的行。 (圆括号)

【讨论】:

【参考方案3】:

我使用 VS2017 (asp.net core 2.2),使用 Devextreme 控件并遇到完全相同的问题。 我发现的唯一(非常丑陋和糟糕的)“解决方法”是将整个代码写在一行上。 详情见以下链接: Link to SO posting

【讨论】:

以上是关于Visual Studio 格式不适用于 Control + K+D 和多行的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Code Flutter格式不适用于我的缩进空间值

Git 命令不适用于 Visual Studio Code

MFC 是不是仅适用于 Visual Studio,不适用于 Visual C++ Express?

Visual Studio 2015 不适用于 Apache Cordova 工具

C# 6.0 功能不适用于 Visual Studio 2015

Visual Studio 智能感知不适用于 DHTMLX 套件 5