3 Stimmen

Ist es möglich, ein Master-Layout zu verwenden, wenn man Spark in Form des direkten Beispielgebrauchs verwendet?

Ist es möglich, ein Master-Layout zu verwenden, wenn man Spark in Form des Direktverwendungsmusters verwendet? Ich habe versucht, sowohl `Include` als auch `RenderPartial` in meinem Layout mit meinem Master-Layout im selben Ordner wie das aufrufende Layout zu verwenden. Außerdem habe ich versucht, das Master-Layout als Vorlage für den SparkViewDescriptor im folgenden Code hinzuzufügen?

    public class DefaultMessageBuilder : MessageBuilder 
    { 
        private readonly ISparkViewEngine _engine; 
        public DefaultMessageBuilder() 
        { 
            var settings = new SparkSettings() 
                .SetDebug(true) 
                .SetPageBaseType(typeof(TemplateBase)) 
                .AddNamespace("System.Collections.Generic"); 
            var templates = new VirtualPathProviderViewFolder("~/Templates"); 
            _engine = new SparkViewEngine(settings) { ViewFolder = templates }; 
        } 
        public override void Transform(string templateName, object data, TextWriter output) 
        { 
            var descriptor = new SparkViewDescriptor() 
                .AddTemplate("Master.spark") 
                .AddTemplate(templateName + ".spark"); 
            var view = (TemplateBase)_engine.CreateInstance(descriptor); 
            try 
            { 
                view.ViewData = new ViewDataDictionary(data); 
                view.RenderView(output); 
            } 
            finally 
            { 
                _engine.ReleaseInstance(view); 
            } 
        } 
    }

4voto

axk Punkte 5035

Ich habe versucht, das gleiche Ergebnis zu erzielen und festgestellt, dass die Reihenfolge, in der Sie die Ansichten zum SparkViewDescriptor hinzufügen, wichtig ist. Wenn Sie die Ansicht zuerst und die Master-Seite zuletzt hinzufügen, funktioniert es für mich gut.

Mit dem folgenden Ansichtsdescriptor würde es "viewPage1.spark" als Ansicht und "masterPage1.spark" als Master-Seite verwenden.

new SparkViewDescriptor().AddTemplate("viewPage1.spark").AddTemplate("viewPage.spark").AddTemplate("masterPage.spark").AddTemplate("masterPage1.spark") 

Es nimmt also das erste als Ansicht und das letzte als Master-Seite. Außerdem scheint es jede Anweisungen zu ignorieren, wenn Sie es auf diese Weise verwenden. Ich vermute, es gibt einen separaten Codeabschnitt, der die Master-Anweisung liest und einen geeigneten SparkViewDescriptor für eine solche Ansicht erstellt, wenn Sie sie im MVC-Szenario verwenden.

0 Stimmen

Du hast absolut recht. Der fehlende Code befindet sich in Spark.Web.Mvc. Vielen Dank, dass du mich in die richtige Richtung gewiesen hast!

0voto

beckelmw Punkte 1737

Es scheint, als ob ich für meine spezielle Situation, in der ich einen Standard-Header und einen Standard-Footer haben möchte, Datei-Enthaltungen wie diese verwenden kann: .

0 Stimmen

Hast du festgestellt, dass nicht funktionieren würde? Ich möchte Master-Layouts auch in einem direkten Anwendungsfall verwenden, aber ich möchte wirklich nicht den "Sandwich"-Ansatz mit separaten Header- und Footer-Templates verwenden...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X