2009-11-15 1 views
3

직접 사용 샘플 의 형태로 Spark를 사용할 때 마스터 레이아웃을 사용할 수 있습니까? 나는 내 레이아웃에서 마스터 레이아웃을 사용하여 전화 레이아웃과 동일한 폴더 을 사용하려고 시도했으며 아래의 코드 의 SparkViewDescriptor에 템플릿으로 마스터 레이아웃을 추가하려고 시도 했습니까?직접 사용 예제의 형태로 Spark를 사용할 때 마스터 레이아웃을 사용할 수 있습니까

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

답변

0

I 표준 머리글과 바닥 글 나는 파일이 같이 포함되어 사용할 수 있습니다 원하는 곳 내 특정 상황에 같이 : <use file="~/Layouts/Master" />합니다.

+0

''작동하지 않을 것이라고 판단 했습니까? 직접 사용 시나리오에서도 마스터 레이아웃을 사용하고 싶지만 별도의 머리말과 꼬리말 템플릿의 "샌드위치"방식을 사용하고 싶지 않습니다. –

4

동일한 결과를 얻으려고했는데 SparkViewDescriptor에 뷰를 추가하는 순서가 중요하다는 것을 알았습니다. 먼저 뷰를 추가하고 마스터 페이지가 나에게 잘 작동합니다.

다음보기 설명자를 사용하면보기로 "viewPage1.spark"를 사용하고 마스터 페이지로 "masterPage1.spark"를 사용합니다.

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

그래서 첫 번째는보기로, 마지막은 마스터 페이지로 이동합니다. 또한이 방법을 사용할 때 <use master=""/> 지시어를 무시하는 것으로 보입니다. 마스터 지시문을 읽고 MVC 시나리오에서 사용할 때 이러한 뷰에 적합한 SparkViewDescriptor를 만드는 별도의 코드 비트가 있다고 가정합니다.

+0

당신이 옳습니다. 누락 된 코드는 Spark.Web.Mvc에 있습니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! – whosrdaddy