【问题标题】:Indentation is broken in Visual Studio .cshtml filesVisual Studio .cshtml 文件中的缩进被破坏
【发布时间】:2015-10-29 03:05:45
【问题描述】:

这是最令人气愤的事情,经过 45 分钟的谷歌搜索和测试后,我向论坛大神们屈服了……如果没有自动缩进,我简直活不下去,即使它只是在 .cshtml 视图文件上

我使用的是 VS2015 社区版。到目前为止,我的 cshtml 文件播放得很好......

由于某种奇怪的原因,压痕损坏了。

我已经尝试了明显的:

  • 选择标记并按 Ctrl+K 和 Ctrl+F
  • 删除并重新添加结束标记(通常会重置缩进)
  • 进入工具>选项>文本编辑器>[插入语言或全部]>选项卡 并将它们设置为智能。

我刚刚安装了 ReSharper,然后才发现问题。不确定这是否导致它,但问题确实是新的,我不记得在那之前见过它。

同样奇怪的是,有些东西会缩进,而另一些则不会

对于那些需要视觉帮助的人,这个缩进让我很沮丧:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
</head>
<body>
<h1>Posts Index</h1>
@if (true)
{
 <text>
     <p>True is true!</p>
 </text>
}
</body>
</html>

【问题讨论】:

  • 你看过Resharper &gt; Options &gt; Code Editing &gt; HTML|Razor|etc &gt; Formatting Style吗?我发现默认设置似乎永远无法与 VS 自动格式化配合得很好,需要进行一些配置。可能在重新安装 Resharper 时丢失了一些设置。
  • 您在一行中有{&lt;text&gt;。这是行不通的,因为您在一行中混合了 C# 和 Html。将&lt;text&gt; 放在打开的车把/squiggle/brace/bracket/thingamabob 下方的行中,然后尝试 CTRL+K、CTRL+F(或 CTRL+K、CTRL+D...无论您的自动格式热键是什么)
  • @rshepp:就是这样!它有一个带有一堆常见标签的“不要缩进子项”子句......我想不是每个人都会同意上述是“坏缩进”,但会选择保持这样。不过,我爱我一些很好的缩进。谢谢!将其发布为答案,我会这样标记。
  • @Nick 嗯...不确定在我粘贴的代码中它是如何结束的,但在我的实际代码中它在它自己的行上。我会更新帖子以匹配...

标签: c# asp.net-mvc razor visual-studio-2015 resharper


【解决方案1】:

您提到您在出现此问题之前刚刚安装了 Resharper,因此您的问题很可能是由 Resharper 引起的。

默认情况下,Resharper 会在您键入时进行许多额外的格式修复,但您可能会发现其中许多默认修复与您的编码风格冲突。

您可以通过Resharper &gt; Options &gt; Code Editing &gt; HTML|Razor|etc &gt; Formatting Style配置Resharper的代码格式化选项

在这种情况下,您的问题是设置 Do not indent children of 包含默认情况下您不想要的标签。

【讨论】:

  • 再次感谢 rshepp,就是这样!到目前为止,我非常喜欢 ReSharper。
  • 非常感谢!很好的答案,非常感谢面包屑
【解决方案2】:

自 3 周以来(自 VS 2013 之后更新到 Visual Studio 2015 SP 2)我遇到了问题,cshtml 文件中的复制/粘贴和注释破坏了我的文件格式。 有趣的是,制表符缩进在第 7 列。我不明白为什么。

更新到 VS 2015 SP 3 后,问题没有被禁止。

然后我发现,在我的 cshtml 文件中,一个“@”符号破坏了我的副本/粘贴/cmets:

@model MAWGridModel<AktionGridRowModel>

@if (Model != null)
{
    @Html.DevExpress().GridView(settings =>
    {
        settings.Name = "MAWAktionenErgebnisGrid";
    ...
    }).Bind(Model).GetHtml();
}

“Html.DevEpress()...”之前的“@”破坏了所有内容。这里的代码 sn-p 对我有用。 (我希望它真的会这样做。)

@model MAWGridModel<AktionGridRowModel>

@if (Model != null)
{
    Html.DevExpress().GridView(settings =>
    {
        settings.Name = "MAWAktionenErgebnisGrid";
        // ...
    }).Bind(Model).Render();
}

希望对你有所帮助。

【讨论】:

  • 我遇到了类似的问题,但在我的情况下,它是一个 @* ... *@ 已经 @-started 代码块内的注释块。我用传统的// 替换了@* ... 注释符号,一切都会再次正常。
【解决方案3】:

我使用 VS2017 (asp.net core 2.2),使用 Devextreme 控件并且遇到完全相同的问题。
我已经停用了复制粘贴后的自动自动格式化,因为现在已经很长时间了(因为它不起作用)。
由于我有 > 100 个 DE 控件的大视图(每个控件平均大约有 5 个属性),我必须不时格式化视图(使用“格式文档”,其中“格式选择”在我的安装中不起作用,顺便说一句)时间,使文件结构“可读”。

如果我这样做,我会遇到完全相同的问题(这些线应该在右侧,直到它们不可见为“显示器外”并且我有一个大显示器......)。
为了使文件再次“可读”,我必须手动编辑每一行(删除错误的空格)。

我现在已经浪费了几个小时尝试错误。 我发现的唯一(非常丑陋和糟糕)“解决方法”是将整个代码写在一行上。
示例:@(Html.DevExtreme().TextBox().ID("AngebotFirma").Value(@Model.PAB_Firma).MaxLength(45).Placeholder("Firma...").InputAttr("autocomplete", "company") )

这样,整个文档(HTML、JQuery 以及 Devextreme(一行)的格式(预期)正确。

所以.. 这不是解决方案,但可能是一种节省时间的解决方法。至少在完成并测试视图之前,我将代码更改为“一行代码”。 在那之后,我 - 也许 - 会将代码改回“多行”......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2017-07-31
    • 2016-03-13
    相关资源
    最近更新 更多