umbraco razor宏在html输出中添加额外的返回

时间:2012-08-05 11:46:37

标签: asp.net razor umbraco

我在我的母版页中有一个宏调用,它根据许多因素(深度,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 个答案:

答案 0 :(得分:1)

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

尝试它只返回一个值。

答案 1 :(得分:0)

尝试使用Html.Raw输出html。 如下所示:

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

  @(Html.Raw(@bodyClass));

}

答案 2 :(得分:0)

删除额外换行符

确保在宏代码之前或之后没有额外的新行。您可能希望在文本编辑器中打开cshtml文件来检查。在我的结束之后做了一些测试(使用v4.8),这是我可以找到的唯一条件,其中添加了额外的换行符。在代码之前使用剃刀评论(@* ... *@)也会添加换行符。


<强>替代

将类添加到标记的另一种方法是使用razor写出标记,如下所示:

<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>

答案 3 :(得分:0)

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

   @{ var bodyClass = "";

和&gt; poof&lt;空白消失了。

这是一个umbraco错误吗?

全部谢谢!