【问题标题】:Razor generating HTML on a single line in if blockRazor 在 if 块中的单行上生成 HTML
【发布时间】:2016-01-26 03:17:06
【问题描述】:

我的 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 中),一个在两个元素之间有间隙,一个没有:

这是 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 助手放在 &lt;div&gt; 中可以解决问题。

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

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

【问题讨论】:

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


    【解决方案1】:

    Razor 抑制代码块中的空白。

    因此,正如您自己发现的那样,手动将某种空白字符写入输出将是模拟您在代码块之外编写的代码的唯一方法。

    【讨论】:

    • 除了将助手包装在
      中之外,还有什么方法可以抑制这种情况?
    • 也许通过将其包装在 @&lt;text&gt; 中?我没试过,所以不能肯定。但是@&lt;text&gt; 应该将其中的所有内容都视为不在代码块中。值得一试。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签