【问题标题】:Configuring the formatting of <% %> blocks in Visual Studio editor在 Visual Studio 编辑器中配置 <% %> 块的格式
【发布时间】:2011-03-10 17:39:51
【问题描述】:

在 Visual Studio 2010 中,在工具 -> 选项 -> 文本编辑器 -> HTML -> 格式 -> 标记特定选项下,有用于配置编辑器如何自动格式化不同 HTML 和 ASP.NET 标记的选项。这包括是否应该自动在标签前后放置换行符等。

是否有地方以类似的方式为 和 块配置格式规则?

特别是,我不想在

例如,我已经将 h1 标签的选项配置为不在其内容周围添加换行符,这对静态内容很有效,但是当有

<h1>
    <%: Model.Name %></h1>

但我想要这个:

<h1><%: Model.Name %></h1>

在理想情况下,我还想自动格式化 块的内容,以确保

例如,好:

<% if (something) { %>

不好:

<%if (something) {%>

那么,是否有任何设置隐藏在某处来控制这些格式行为中的任何一种?

【问题讨论】:

    标签: asp.net visual-studio visual-studio-2010


    【解决方案1】:

    感谢@schellack 让我朝着正确的方向前进。以下是获得所需行为所需的设置(全部在标签特定选项对话框中):

    • 默认设置 -> 客户端标签支持内容
      • 换行符:之前和之后
      • (这使得 h1、p 和类似标签的行为符合我的要求。其他人可能想要 None 作为选择。我想是个人偏好。)
    • 在客户端 HTML 标签下添加一个新标签。
      • 标签名称:%
      • 结束标签:没有结束标签
      • 换行符:之前和之后
      • (这会捕获实际的代码块,并通过代码块前后的换行符将它们与 HTML 标记分开。)
    • 在客户端 HTML 标签下添加另一个新标签
      • 标签名称:%:
      • 结束标签:没有结束标签
      • 换行符:无
      • (这会捕获 块并将它们与 HTML 标记保持内联,而不会出现任何换行符。)
    • 在客户端 HTML 标签下添加另一个新标签
      • 标签名称:%=
      • 结束标签:没有结束标签
      • 换行符:无
      • (与上一个类似。这会捕获 块并将它们与 HTML 标记保持内联,而不会出现任何换行符。)

    诀窍在于编辑器似乎将 块识别为名为 '%' 的客户端标记,该标记没有结束标记。 和 的交易相同。

    通过这些设置(结合 Visual Studio 中的其他默认设置),我得到如下格式化标记(这是我正在寻找的紧凑形式):

        <h1><%: Model.Name %></h1>
        <ul>
            <% foreach (var item in Model.Items) { %>
            <li><%: item %></li>
            <% } %>
        </ul>
    

    到目前为止,我的问题的第二部分似乎不太可能。

    【讨论】:

    • 请注意,在这种情况下,ReSharper 不是很有帮助,因为我们希望自动格式化“;”和“}”在常规源代码中,但不在我们的 html 标记中。
    • 我永远也永远不会找到这些选项,这让我发疯了很久。谢谢!
    • 我想你不知道是否可以删除换行符 VS 仍然会放入 之类的东西吗?
    【解决方案2】:

    您正在寻找正确的区域:

    工具 -> 选项 -> 文本编辑器 -> HTML -> 格式 -> 特定标签 选项。

    但是,您需要在默认设置下的“客户端标签支持内容”中将换行符设置为“无”。 Visual Studio 正在查看此设置,而不是 &lt;h1 /&gt; 标记的设置。

    我不相信这会给你想要的 &lt;% %&gt; 标签内的间距,但它会修复那些有害的额外换行符。

    [编辑] 我最初说过要设置“服务器标签支持内容”的选项,但我认为它实际上是“客户端标签支持内容”(我在上面更改了这个)。您还可以将“换行符”设置为“之前和之后”而不是“无”,如果这样可以更好地为您提供所需的内容。您可能还需要将“客户端标签不支持内容”的换行符设置为“无”。

    【讨论】:

    • 为“客户端标签不支持内容”设置无对于我想​​要的东西来说太广泛了(我想要之前和之后的那些),但是 +1 的提示可以帮助我找到更好的解决方案。
    【解决方案3】:

    从 VS 的角度来看,这两个文件夹(Client 和 ASP.NET)之间确实没有任何显着差异。它们的存在只是为了方便。事实是标签只能通过它的名字来识别,并且(幸运的是)VS 忽略了它不是一个真正的标签。因此,您可以将主题设置放在任一文件夹中。甚至更多人可以创建(我个人所做的)另一个文件夹(例如,称为 Expressions)并在那里存储设置。

    关于更改“默认设置”。如果只想更改几个标签的设置,那么恕我直言,最好为这些标签本身创建/更改规则,而不是更改默认值(似乎 h1-h6 规则在默认规则集)。

    【讨论】:

      【解决方案4】:

      嗯,有编辑 -> 高级 -> 格式化文档,我猜这也会弄乱你的代码。我搜索了大量文档,试图找到更多内容,但据我所知,什么都没有。

      编辑: 问题不在于 HTML 格式选项,而在于 “标签”。例如:&lt;h2&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt; 效果很好。正如我所说,我不认为这是可以做到的。

      目前我建议使用:

      <h2>
          <%="Hello World" %>
      </h2>
      

      <h2>
          <%
              if(true)
                  Response.Write("Hello World");
          %>
      </h2>
      

      【讨论】:

      • 谢谢,但这个答案只是重申了我的问题。我知道问题出在 标记上,并且我知道如何将它们配置为 3 行。问题是是否有可能将其放在 1 行上,因为当代码块简短且琐碎时(ASP.NET MVC 中经常出现这种情况),这样更容易阅读。我的问题的答案实际上可能是“不可能”。
      • 正如我所说,在我看来这是不可能的,因为 不被视为 HTML“标签”,也不被视为 C# 语法元素。上面的两个代码示例显示,根据 Microsoft 的示例,开发人员打算使用 “标签”的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2015-06-08
      • 1970-01-01
      相关资源
      最近更新 更多