Razor在if块中的单行上生成HTML

时间:2016-01-26 03:17:06

标签: c# html asp.net-mvc razor

我的Razor视图中有以下代码

    @Html.LabelFor(t=>t.Name)
    @Html.LabelFor(t=>t.Name)

    @if (true)
    {
        @Html.LabelFor(t => t.Name)
        @Html.LabelFor(t => t.Name)
    }

这两个代码块生成不同的HTML。

    <label for="Name">Name</label>
    <label for="Name">Name</label>

<label for="Name">Name</label><label for="Name">Name</label>

这也以不同的方式显示(在Chrome和IE中),两者之间有差距,一个没有:

Rendered HTML

这是Razor / MVC中的错误吗?或者我不应该在if块中使用@Html帮助器吗?

更改为以下内容会使它们显示相同但不理想。

    @Html.LabelFor(t=>t.Name)
    @Html.LabelFor(t=>t.Name)

    @if (true)
    {
        @Html.LabelFor(t => t.Name)@Html.Raw("\n")
        @Html.LabelFor(t => t.Name)
    }

更新

将Html助手放在<div>内可以解决问题。

@Html.LabelFor(t=>t.Name)
@Html.LabelFor(t=>t.Name)

@if (true)
{
    <div>
        @Html.LabelFor(t => t.Name)
        @Html.LabelFor(t => t.Name)
    </div>
}

1 个答案:

答案 0 :(得分:3)

Razor抑制代码块中的空格。

因此,当您自己找到时,手动将某种空白字符写入输出将是模拟您在代码块之外编写的代码的唯一方法。