Umbraco剃刀模板 - 从参数中指定的字段获取格式化日期

时间:2011-05-03 14:39:39

标签: razor umbraco

我正在尝试从umbraco中的剃刀模板返回格式化日期。我不知道如何从参数中定义的字段中获取值。

这是我正在玩的代码。我传入的字段称为“articleDate”。我正在获取参数值输出,但是当我尝试使用参数名称获取字段的值时,它不返回任何内容。如果我通过字段名称本身询问值,那就有效。如何创建这样的通用宏?

@{var param = @Parameter.dateField;}
Field Name: @param
<br/>
Field Value: @Model.param
<br/>    
Field Value: @Model.articleDate

我也试过使用@ Model.GetDynamicMember(..),但这只会引发异常。

Field Value: @Model.GetDynamicMember("articleDate");​

Error loading Razor Script getDate.cshtml
Cannot invoke a non-delegate type

有人能指出我正确的方向吗?我只是想创建一个简单的宏,我可以使用它来格式化我的页面上的日期。

是否可以将我的日期值直接传递给剃刀宏?这就是我现在称之为的方式:

<umbraco:Macro ID="Macro1" Alias="getDate" dateField="articleDate" runat="server"></umbraco:Macro>

1 个答案:

答案 0 :(得分:6)

如果你像你写的那样打电话给你:

<umbraco:Macro ID="Macro1" Alias="getDate" dateField="articleDate" runat="server"></umbraco:Macro>

您实际上是在传递“articleDate”字段的名称。在宏中,您可以使用:

获取Model的articleDate属性的值
Field Value: @Model.getProperty(Parameter.dateField).Value

除了宏,我还建议使用帮助或 - 对于更复杂的脚本 - RenderPage 。一个很好的写作可以在这里找到: http://joeriks.wordpress.com/2011/03/11/better-structure-for-your-razor-scripts-with-renderpage-in-umbraco/

示例:

@helper GetDate(dynamic dateField)
{
     @dateField.ToString("[yourFormat]")
}

您可以使用Page对象将参数传递给使用RenderPage呈现的脚本:

<umbraco:macro language="razor" runat="server">
@{
    Page.dateField=Model.articleDate;
}
@RenderPage("~/macroscripts/getdate.cshtml")
</umbraco:macro>

getdate.cshtml:

@Page.datefield.ToString("[yourFormat]")