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 ответ:
Если вы называете свой макрос так, как вы написали:
<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]")