0

我的母版页中有一个宏调用,它根据许多因素(深度、URL 路径等)设置正文类但是,我已经对其进行了精简以找出宏在最终 html 中添加额外空间的原因.

母版页宏行:

    <body class="<umbraco:Macro Alias="Bodyclass" runat="server"></umbraco:Macro>">

简化宏:

@{
  var bodyClass = "";
  if ((Model.NodeTypeAlias == "WLHomePage" ) ||
     (Model.NodeTypeAlias == "WLHomeSubPage" ))
  { bodyClass = "front"; } else {
     bodyClass = "not-front";  }
    @bodyClass;
}

回报:

    <body class="
front">

注意 class=" 的第一个双引号和实际的类字符串之间的额外空格。

4

4 回答 4

1
@{
    if (Model.NodeTypeAlias == "WLHomePage" || Model.NodeTypeAlias == "WLHomeSubPage")
    { 
        return "front";
    }
    else 
    {
        return "not-front";
    }
}

在它只返回一个值的地方尝试它。

于 2012-08-06T11:30:37.117 回答
0

我的 .NET 开发伙伴破解了这个:它是第一行中的空白。向上移动 var,如下所示:

   @{ var bodyClass = "";

和 >poof< 空白消失了。

那么这是一个umbraco错误吗?

谢谢大家!

于 2012-08-06T20:40:50.530 回答
0

删除额外的换行符

确保在宏代码之前或之后没有额外的新行。您可能需要在文本编辑器中打开 cshtml 文件以进行检查。在对我进行了一些测试之后(使用 v4.8),这是我能找到的添加额外换行符的唯一条件。在代码前使用 razor comments ( @* ... *@) 也会添加换行符。


选择

将类添加到标签的另一种方法是用剃刀写出标签,如下所示:

<umbraco:Macro language="cshtml" runat="server">
@{
    string bodyClass = "not-front";

    if ((Model.NodeTypeAlias == "WLHomePage" ) ||
        (Model.NodeTypeAlias == "WLHomeSubPage" ))
    {
        bodyClass = "front";
    }

    @:<body class="@bodyClass">
}
</umbraco:Macro>

    ...

</body>
于 2012-08-06T18:43:02.353 回答
0

尝试使用 Html.Raw 输出 html。所以像:

@{
  var bodyClass = "";
  if(...)
  { 
    bodyClass = "front"; 
  } 
  else 
  {
    bodyClass = "not-front";  
  }

  @(Html.Raw(@bodyClass));

}
于 2012-08-05T15:23:00.573 回答