Шаблон бритвы Umbraco - Получить форматированную дату из поля, указанного в параметре - PullRequest
3 голосов
/ 03 мая 2011

Я пытаюсь вернуть отформатированную дату из шаблона бритвы в umbraco.Я не уверен, как получить значение из поля, определенного в параметре.

Вот код, с которым я играю.Поле, которое я передаю, называется "articleDate".Я получаю вывод значения параметра, однако, когда я пытаюсь получить значение поля, используя имя параметра, он ничего не возвращает.Если я спрашиваю значение по имени самого поля, это работает.Как я могу создать общий макрос, подобный этому?

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

Я также пытался использовать @ Model.GetDynamicMember (..), но это просто вызывает исключение.кто-то указывает мне правильное направление?Я просто пытаюсь создать простой макрос, который можно использовать для форматирования дат на моей странице.

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

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

1 Ответ

6 голосов
/ 03 мая 2011

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

<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]")
...