以直接用法示例的形式使用Spark时,可以使用主布局

时间:2009-11-15 14:53:02

标签: spark-view-engine

使用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 个答案:

答案 0 :(得分:4)

我试图获得相同的结果,并发现将视图添加到SparkViewDescriptor的顺序很重要。首先添加视图和最后一个主页对我来说很好。

使用以下视图描述符,它将使用“viewPage1.spark”作为视图,使用“masterPage1.spark”作为母版页。

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

因此,第一个作为视图,最后一个作为母版页。当你以这种方式使用它时,似乎也忽略了任何<use master=""/>指令。我想有一些单独的代码可以读取master指令,并在MVC场景中使用它时为这样的视图创建一个合适的SparkViewDescriptor。

答案 1 :(得分:0)

对于我想要标准页眉和页脚的特殊情况,我可以使用这样的文件包含:<use file="~/Layouts/Master" />