这将使我完全疯狂!
我以前做过这个,我知道它应该有效,而且它应该是直截了当的。
我创建了一个像这样的宏
@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)
请帮忙吗?
答案 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" />