Можно ли использовать мастер-макет при использовании Spark в форме примера прямого использования - PullRequest
3 голосов
/ 15 ноября 2009

Можно использовать мастер-макет при использовании Spark в виде образец прямого использования? Я попытался использовать оба в моем макете с моим основным макетом в та же папка, что и макет вызова, и я также попытался добавить мастер-макет как шаблон для SparkViewDescriptor в коде ниже?

    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); 
            } 
        } 
    } 

Ответы [ 2 ]

4 голосов
/ 18 июля 2010

Я пытался достичь того же результата и обнаружил, что порядок, в котором вы добавляете представления в SparkViewDescriptor, имеет значение. Добавление представления в первую очередь и главной страницы в последнюю очередь работает нормально для меня.

При использовании следующего дескриптора представления будет использоваться «viewPage1.spark» в качестве представления и «masterPage1.spark» в качестве главной страницы.

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

Таким образом, первое принимает в качестве представления, а последнее - в качестве главной страницы. Также, кажется, что вы игнорируете любые директивы <use master=""/>, когда вы используете его таким образом. Я предполагаю, что есть некоторый отдельный фрагмент кода, который читает директиву master и создает соответствующий SparkViewDescriptor для такого представления, когда вы используете его в сценарии MVC.

0 голосов
/ 16 ноября 2009

Это похоже на мою конкретную ситуацию, когда я хочу иметь стандартный верхний и нижний колонтитулы, я могу использовать файл включает в себя, как это: <use file="~/Layouts/Master" />.

...