为什么Visual Studio代码格式不适用于Razor标记?

Pro*_*ofK 70 asp.net-mvc visual-studio-2010 visual-studio razor asp.net-mvc-3

或者,我是否应该问,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;" })
    }
 }
Run Code Online (Sandbox Code Playgroud)

我认为这对于可读性很重要,例如在上面,if块的主体是缩进的,除了看起来更好.

Cha*_*rns 42

务必将编辑器设置为使用空格字符而不是制表符.当使用标签时,编辑器似乎完全失去了理智.这是一个遗憾,因为所有这些空格字符最终都在实际的HTML输出中,大大增加了数据传输的大小.我所做的是在输入时手动补充自动格式.不理想,但希望微软能够为下一个服务包找到这个.

  • 非常讨厌 - 我讨厌使用空格来缩进.但它确实有效,所以感谢您的建议. (28认同)
  • 空间与标签的争论几乎不是封闭的.这是一个偏好问题.我更喜欢标签,但不是因为文件大小.两种偏好都存在争议,例如http://lea.verou.me/2012/01/why-tabs-are-clearly-superior/ (13认同)
  • 仍然是Visual Studio 2015中的一个错误:((( (12认同)
  • 和VS 2015 Update 3 ......:/这是愚蠢的! (7认同)
  • "大大增加数据传输大小"你关闭了服务器压缩?否则这是非常名义上的...... (3认同)
  • 它最终在HTML输出中的事实实际上并没有增加数据传输的大小.现在大多数Web服务器和浏览器都使用压缩,因此重复的空间并没有真正增加那么多. (2认同)

Jos*_*uch 13

我找到了一个"解决方案",允许您继续使用制表符缩进并具有正确的格式.这更像是一种模式.关键是使用剃刀代码块而不是内联代码.

例如,替换以下内容:

<div>
    <div>
        @if (true)
        {
            <b>Hi</b>
        }
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

有:

<div>
    <div>
        @{
            if (true)
            {
                <b>Hi</b>
            }
        }
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

后者将正确格式化,但前者不会.

请记住,格式化并不完美,但它比以前更好.

  • 为此+10000。很棒的建议,效果很好。`@{ if(something) { // 也有常规的 C# 注释... } }` (2认同)

mar*_*ind 8

它在所有情况下都无法正常工作,因为这是一个难以解决的问题.基本上你有3个不同的编辑器(HTML,C#和Razor)都在同一个文本缓冲区上进行交互.在某些情况下(如此),交互存在错误.但我们正在努力改进下一版Razor的编辑器.

  • 我想选择不格式化我的HTML/Razor.它似乎永远不会正常工作,有时它会以破坏页面的方式重新格式化我的HTML(有时添加空格会破坏布局 - grr).我想如果所有的错误都可以解决并产生干净的html/razor我会很高兴,但我的猜测是这太复杂了,总会有bug.另外,对Razor和C#使用不同的格式会很不错.我通常把我的括号放在C#中的一个单独的行上,但在Razor中是同一行. (40认同)
  • @marcind我正在查看Visual Studio 2012中的MVC 4项目,如果使用制表符而不是空格,它仍然无法正常工作(在ifs获取空格而不是制表符时打开和关闭括号). (7认同)
  • 已经过了一年多了,我每天都会因为这些错误而感到沮丧.是否有任何计划用于VS 2010,或者是关注VS 2012? (2认同)
  • 现在在 VS2015 更新 2 中情况更糟。如果关闭所有格式选项并粘贴代码或键入新功能块,所有代码都会左对齐。让我疯狂。“什么都不做”有什么难的? (2认同)

Der*_*eit 5

这里更好的替代方案(而不是使用制表符空格)是将HTML和C#/ VB的块缩进更改为"阻止"而不是"智能".这不是一个完整的解决方案,但IMO比使用空间更难以解决问题!


Sid*_*ron 5

我为此找到了另一个解决方案。只需选择文件中的所有代码,单击 Shift + Tab 删除代码之前的所有选项卡,然后复制并粘贴它。Visual Studio 自动格式化代码。处理 VS 2013 .cshtml 文件