【问题标题】:Umbraco dynamic properties or parameters in razor macro don't work剃刀宏中的 Umbraco 动态属性或参数不起作用
【发布时间】:2012-03-31 12:41:44
【问题描述】:

这快把我逼疯了!

我以前做过这个,我知道它应该可以工作,而且应该很简单。

我已经创建了一个像这样的宏

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

有什么帮助吗?

【问题讨论】:

  • Umbraco 4.7.1(抱歉忘记了)

标签: razor parameters macros umbraco


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我通过添加这些来解决它:

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

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

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

    【讨论】:

      【解决方案3】:

      在您的模板或视图中,您可以这样调用宏

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

      如果使用网络表单

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

      其中“ArticleId”是您要传递的参数。然后确保将参数“ArticleId”添加到开发人员部分的宏的参数列表中。

      然后在你的 XSLT 中像这样引用参数

      <xsl:param name="ArticleId" select="/macro/ArticleId"/>
      

      然后您可以使用传入的值在您的 xslt 中使用它

      <xsl:value-of select="$ArticleId" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多