我正在尝试从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>
答案 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]")