2016-05-04 13 views
1

Ich lerne Umbraco 7 und möchte eine Bibliothek von gemeinsamen Razor-Funktionen erstellen.Umbraco 7 @Funktionen zwischen Vorlagen teilen

Meine Idee war eine Kernteilansicht, die in den meisten Vorlagen enthalten wäre und diese Teilansicht würde einen @functions {} Block haben.

Ich wäre dann in der Lage, diese Funktionen von den Hauptvorlagen aufzurufen. Dies scheint jedoch nicht zu funktionieren - vermutlich ist es ein Problem Bereich.

Ich habe versucht, ViewBag und ViewData zu verwenden, aber Änderungen in der partiellen wird nicht an die Vorlage zurückgegeben.

Mit anderen Worten, es scheint, dass ich Parameter und Seiteneigenschaften zu eine Teilansicht übergeben kann, aber nichts zurück an die aufrufende Vorlage übergeben kann?

Die Funktionen wären verschieden, einschließlich String-Manipulation auf dem Seiteninhalt (zB string replace) die Idee wäre die Funktion hätte Parameter der Eigenschaft in Frage, einige Text zu ersetzen und dann das Ergebnis an die Vorlage für Ausgeben, so dass andere Ideen sind

  • die Teilansicht die Seiteneigenschaften aktualisiert, die dann ausgegeben von der Vorlage sein können (ist das möglich?)
  • Gabe von Parametern an den Teil (einschließlich einem zu sagen, welche Funktion verwenden zu) und haben das Teil selbst das Ergebnis der Funktion an den Browser ausgegeben. Da ich jedoch die Funktionen für mehr als eine Eigenschaft auf der Seite verwenden möchte, würde dies bedeuten, dass die partielle Ansicht mehrmals für jede Eigenschaft einmal eingefügt wird. Würde dies Probleme verursachen?
  • die Funktion auf der Master-Template setzen und von den Kind-Vorlagen aufrufen (nicht funktioniert)

Oder gibt es eine bessere Art und Weise, die mir fehlt.

Zusammengefasst, was ich versuche zu tun (ohne Controller oder einen Teil des MVC zu ändern - dh mit Umbraco out of the box), sind generische Funktionen zentral gespeichert, die ich Vorlagen aufrufen kann, um die Seite zu manipulieren Inhalt vor dem Senden an den Browser.

Vorschläge/Links dankbar erhalten.

[Bearbeiten]

eine mögliche Lösung gefunden: Funktionen hinzufügen Datei in App_Code und beziehen sich auf nach Dateinamen

zB

myFunctions.cshtml hat Funktion myFn (bis cshtml ...

so in Vorlage @ myFunctions.myFn (...

Ist das eine robuste Lösung?

Der Nachteil ist, dass sich Änderungen sofort auf die gesamte Site auswirken. Daher ist jeder Fehler ein Problem, während eine Teilansichtslösung nur die Vorlagen betrifft, in denen sie verwendet werden.

+0

Gibt es einen Grund, die Erstellung einer Hilfsklasse (oder die Erweiterung von UmbracoHelper) zu vermeiden und diese in Ihren Ansichten zu referenzieren? – elolos

Antwort

1

Sie könnten auch einfach eine Klassendatei im App_Code-Ordner (wie Helpers) erstellen.cs oder etwas) - welche Funktionen in dieser Klasse platziert werden, sollte während des gesamten Projekts verfügbar sein, und natürlich würde es nur einen Platz geben, um den Code zu verwalten.

+0

Hallo - ich habe das getan und es funktioniert. Vielen Dank. Kann ich auf umbraco-Dokumente in app_code cshtml zugreifen? Umbraco.Content (id); funktioniert nicht - kann ich auf Umbraco Knoten zugreifen? – YesGenesisCamel

+0

Yup. Nachschlagen UmbracoHelper :-) –

+0

Hmmm ... Suche nach diesem, aber ein wenig verschwommen - wo ist die beste Ressource für weitere Informationen? – YesGenesisCamel