2014-10-01 9 views
9

Come dice il titolo, quando dovrei usare @Umbraco, @CurrentPage o @Model in visualizzazioni Razor per ottenere proprietà da un nodo.Umbraco 7 quando utilizzare @Umbraco vs @CurrentPage vs @Model in visualizzazioni Razor?

@Model.Content.GetPropertyValue() restituisce un oggetto fortemente tipizzato, mentre @CurrentPage restituisce un oggetto dinamico. Tuttavia, con @Umbraco posso ottenere una dinamica (@Umbraco.Content()) o un oggetto fortemente tipizzato (@Umbraco.TypedContent()).

L'agente @Umbraco può fare tutto ciò che può fare @CurrentPage e @Model? Quando dovrei usare quale e perché?

risposta

15

Hai risposto tu stesso alla maggior parte delle tue domande. @Model e @CurrentPage sono gli stessi tranne @CurrentPage è dinamico. Entrambi restituiscono la pagina corrente. Ciò significa che, se si interrompono le visualizzazioni da UmbracoViewPage, non è possibile utilizzare @CurrentPage perché questo è disponibile solo su UmbracoViewTemplate. Personalmente mi piace @Model più di @CurrentPage, ma è una scelta personale

@Umbraco è una bestia completamente diversa. Non restituisce la pagina corrente, ma ha un sacco di metodi per ottenere altri contenuti, media e membri in diversi modi (ad esempio xpath). Ma anche templating e metodi misc come:

  • Umbraco.If (condizione, TrueValue [, falseValue])
  • Umbraco.Trunctate // testo limite di dimensione
  • Umbraco.StripHtml // rimuovere i tag HTML
  • Umbraco.Search // cerca testo intero

Per saperne di più sul @Umbraco, visitare il Umbraco helper documentation

Es. Se hai un ID immagine dal nodo corrente utilizzando

var imgId = @Model.Content.GetPropertyValue<string>("img") 

allora si potrebbe utilizzare @Umbraco.TypedMedia(imgId) per ottenere l'oggetto IPublishedContent immagine.

Aggiornamento: Accanto a @ Umbraco.Field ("propertyAlias"), che è una delle aiutanti di modello, è possibile utilizzare anche @ Umbraco.Field (x, "propertyAlias") dove x è un IPublishedContent. Ciò restituirà sempre un IHtmlString che lo rende poco pratico per altre attività di programmazione, ma rende Umbraco.Field() un metodo di supporto molto bello per restituire le proprietà.

Aggiornamento 2: A partire dalla versione 7.4, c'è un ModelBuilder, che permette di definire e utilizzare UmbracoTemplatePage<ContentModels.HomePage>@Model.Content.BodyText in seguito. A partire da Umbraco v8 (on the roadmap), il supporto per la dinamica (CurrentPage su UmbracoTemplatePage) è stato eliminato. Quindi prepararsi utilizzando ModelsBuilder e UmbracoViewPage<MyModel>.