【问题标题】:How to avoid additional whitespaces and "\r\n" being inserted in render tree in Blazor如何避免在 Blazor 的渲染树中插入额外的空格和“\r\n”
【发布时间】:2021-04-09 05:57:56
【问题描述】:

以下示例代码

<div>
    @for (int i = 0; i < 10; i++)
    {
        <span class="@classes[i]">@i</span>
    }
</div>

我想要显示的是(每个字符的风格不同)

01234567890

但实际显示的是(每个字符之间的额外空格)

0 1 2 3 4 5 6 7 8 9

我使用 ILSpy 调查渲染树中发生的情况,发现如下

        __builder.OpenElement(2, "div");
        __builder.AddMarkupContent(3, "\r\n");
        for (int i = 0; i < 10; i++)
        {
            __builder.AddContent(4, "        ");
            __builder.OpenElement(5, "span");
            __builder.AddAttribute(6, "class", classes[i]);
            __builder.AddContent(7, i);
            __builder.CloseElement();
            __builder.AddMarkupContent(8, "\r\n");
        }
        __builder.CloseElement();

序列4添加了额外的空格,序列8添加了“\r\n”,我认为这是字符之间额外的空格的原因。

我可以通过这样写来缓解这个问题

<div>@for (int i = 0; i < 10; i++)
{<span class="@classes[i]">@i</span>}
</div>

但是,当同一行中有更多不同的内容时,代码会很长。此外,当我按 Ctrl+D 格式化文档时,在某些情况下 VS 会以错误的方式“修复”代码。

我想看看对于这个问题是否有更好的建议。我考虑过(但还没有找到解决方案)

  1. 使用 CSS 忽略跨度之间的空格和\r\n
  2. 以某种方式添加额外的 @{} 来帮助格式化。
  3. 一些用于避免空格的神奇参数,\r\n 添加到了渲染树中。

【问题讨论】:

    标签: html css razor blazor


    【解决方案1】:

    我猜你仍在使用 aspnetcore 3.x,因为这已在 .NET5 中修复。

    在 .NET5 Blazor 项目中尝试一下 - 它应该可以正常工作。

    【讨论】:

    • 感谢您的解决方案。只是想添加一些额外的发现。我认为 .NET 5.0 发生的情况是 {} 周围的额外空格和“\r\n”被删除,但并非所有这些都被删除。因此,如果情况类似于 1\r\n2,它仍然会中断。但是,可以使用 {} 更好地对其进行格式化,例如 @{1}\r\n@{2}。使用 Ctrl+D 仍然不能完全正常工作,有时在 Ctrl+D 之后代码会完全混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多