Umbraco razor template-получить отформатированную дату из поля, указанного в параметре


Я пытаюсь вернуть отформатированную дату из шаблона razor в 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
Может ли кто-нибудь указать мне правильное направление? Я просто пытаюсь создать простой макрос, который можно использовать для форматирования дат на моей странице.

Можно ли передать значение моей даты непосредственно в макрос razor? Вот как я сейчас это называю:

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

1 ответ:

Если вы называете свой макрос так, как вы написали:

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

Вы фактически передаете имя поля "articleDate". Затем в макросе вы можете получить значение свойства articleDate модели, используя:

Field Value: @Model.getProperty(Parameter.dateField).Value

Вместо макросов я также рекомендую использовать helpers или - для более сложных сценариев - 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]")
}

Вы можете передавать параметры скриптам, отрисованным с помощью RenderPage, используя объект Page:

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

Getdate.cshtml:

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