剃刀宏中的Umbraco动态属性或参数不起作用

时间:2012-03-31 12:41:45

标签: razor parameters macros umbraco

这将使我完全疯狂!

我以前做过这个,我知道它应该有效,而且它应该是直截了当的。

我创建了一个像这样的宏

@inherits umbraco.MacroEngines.DynamicNodeContext
@{
    string ParameterName = Parameter.Name;
    <span>@ParameterName</span>
 }

并在页面上:

<umbraco:macro Alias="MasterpageParameter" language="cshtml" runat="server" Name="logoText"></umbraco:macro>

宏注册成功(因为我可以在屏幕上打印其他数据,在这种情况下我可以看到获取打印的otu)但参数始终为空。我尝试了小写,其他名称(例如Param1 Param2等),参数始终为空。

我确信我在另一个项目中做了一些相同的事情,之前工作正常。 无法找出阻止这个宏工作的原因。

更糟糕的是,如果我在DocumentType上添加一个属性,即“IsReadable”,我之前在之前的项目中所做的就是遍历页面并说出if(item.IsReadable)等等。现在,使用相同的Umbraco版本的所有动态变量都是空的。这里似乎有些严重错误,但我不知道如何解决它。

我正在使用umbraco v 4.7.1.1(程序集版本:1.0.4393.24044)

请帮忙吗?

3 个答案:

答案 0 :(得分:2)

听起来您没有在CMS中的宏定义中定义参数。在这种情况下,它将位于“MasterpageParameter”宏的“参数”选项卡中。

答案 1 :(得分:1)

我通过添加以下内容解决了这个问题:

@using umbraco;
@using System;
@using System.Collections.Generic;
@using umbraco.MacroEngines;

可能只需要其中一些,但我没有费心去发现。 仅添加MacroEngines是不够的......

这在以前的项目中是奇怪的原因,不需要这些。也许在这个项目的web.config中没有正确引用它们或类似的东西。无论如何它现在有效,所以我很高兴

答案 2 :(得分:0)

在您的模板或视图中,您可以通过这种方式调用宏

@Umbraco.RenderMacro("YourMacro" ,new {ArticleId = @Umbraco.Field("yourField")})

如果使用webforms

<umbraco:macro ID="Macro1" Alias="YourMacro" runat="server" ArticleId="223"></umbraco:macro>

Where&#34; ArticleId&#34;是您要传递的参数。然后确保添加参数&#34; ArticleId&#34;从开发人员部分到宏的参数列表。

然后在你的XSLT中引用像

这样的参数
<xsl:param name="ArticleId" select="/macro/ArticleId"/>

然后,您可以使用传入的值(例如

)在xslt中使用它
<xsl:value-of select="$ArticleId" />