2012-05-03 3 views
7

나는 RazorEngine 다음과 같은 면도기 템플릿을 사용하고 싶습니다 : 나는 그것을 호출 할 때RazorEngine - 사용 레이아웃 및 Html.Raw

@{ 
    Layout = null; 
} 

@Html.Raw(MyNamespace.MyClass.SomePropertyWithHtml) 

내가이 오류를 얻을 - 그것은 레이아웃을 처리 할 수없는 불평을하고, 또 다른 사람은 Html 도우미를 다루는 방법을 알지 못한다고 불평합니다.

다른 질문과 대답이 여기에 있으며 v3에서 가능하며 NuGet - v3.0.8에서 현재 패키지를 사용하고 있습니다. 그러나 이것이 어떻게 수행되는지는 명확하지 않습니다. 현재 내가 그렇게처럼 전화 해요 :

string html = RazorEngine.Razor.Parse(File.ReadAllText(path)); 

다른 대답을 제안 전류 소스 또는 자식의 3.0 분기에 표시되지 않는 먼저 Razor.SetBaseTemplate를 사용하여. 코드를 보면 레이아웃과 섹션을 참조하는 코드가 있지만 레이아웃 코드는 이름으로 템플릿을 해석하는 데 의존하는 것처럼 보입니다. 반면에 내가하려는 것은 템플릿을 해결할 필요조차 없습니다. Layout = null 인. 이 코드에는 웹 프로젝트에서 HtmlHelper를 제공하는 것으로 보이는 MvcTemplateBase도 포함되어 있지만 프로젝트의 유일한 클래스이며 웹 또는 핵심 프로젝트의 어느 곳에서도 참조되지 않습니다.

이 비슷한 질문 : RazorEngine issues with @Html

그냥 당신이 거기에 자세한 내용을 찾을 수 없다는 홈페이지에 링크 - 홈페이지 프로젝트를 설명하는 짧은 문장이다.

그래서 RazorEngine v3.0으로 위의 면도기 뷰를 구문 분석하는 방법은 무엇입니까?

+0

오, 당신이 RazorEngine를 사용하고 ... 또 한 가지 유념해야 할 점은 면도기가 MVC되지 않는 것입니다. 새로운 RazorEngine으로 많은 작업이 완료되었지만 요즘 Antaris가 정말 바빴습니다. 파일의 상단에'@inherits MvcTemplateBase '을 사용할 수 있어야합니다. – Buildstarted

+2

제안 해 주셔서 감사합니다. Razor와 MVC가 분리되어 있다는 것을 알았지 만, 내 목표는 일반적인 ASP.Net 파이프 라인 내부와 외부에서 동일한 MVC Razor 템플릿을 사용하는 것입니다. NuGet의 버전에는 MvcTemplateBase라는 클래스가 없습니다. Git의 최신 버전은 일반적이지만 MvcTemplateBase 일뿐입니다. @inherits RazorEngine.Razor.MvcTemplateBase와 같은 라인을 추가하면 TemplateService.SetModelExplicit에 Exception이 발생합니다.이 템플릿 타입에는 Model이라는 속성이 없습니다. 아이디어? –

답변

2

Layout 속성과 Html 도우미는 TemplateBase의 일부, 그리고 RazorEngine (v3.4.1)의 최신 버전의 일부입니다 MvcTemplateBase의 구현하지 않은 불완전한 나타납니다 (InitHelpers는 헬퍼를 초기화하지 않는 것 ?). 이러한 기능을 구현하는 자체 기본 템플릿을 만들어야합니다.

언급 한 것처럼 v3 + 버전에는 Razor.SetBaseTemplate 메서드가 포함되어 있지 않습니다. 당신과 같이 현재 버전에서 기본 템플릿 유형을 설정할 수 있습니다

var config = new RazorEngine.Configuration.TemplateServiceConfiguration 
    { 
     BaseTemplateType = typeof(MyTemplateBase<>) 
    }; 

using (var service = new RazorEngine.Templating.TemplateService(config)) 
{ 
    Razor.SetTemplateService(service); 
    return MvcHtmlString.Create(Razor.Parse<TModel>(templateText, model)); 
} 

당신이 도우미를 초기화해야 하는가, 같은 TemplateServiceConfiguration에게 제공 할 수 IActivator의 사용자 정의 구현에 CreateInstance을 무시하는 것이 도움이 될 수 있습니다 BaseTemplateType :

var config = new RazorEngine.Configuration.TemplateServiceConfiguration 
    { 
     BaseTemplateType = typeof(MyTemplateBase<>), 
     Activator = new MyActivator() 
    }; 
+0

흠 어떤 RazorEngine 버전을 사용하고 있습니까? 아니면 MvcTemplateBase를 자신의 클래스로 파생 했습니까? 현재 소스에는 MvcTemplateBase의 일반 버전이 없습니다. https://github.com/Antaris/RazorEngine/blob/master/src/Web/RazorEngine.Mvc/MvcTemplateBase.cs –

+0

MvcTemplateBase는 자체 개발 된 구현입니다.위의 요점은 실제로 모든 뷰를 상속 받도록 기본 템플릿을 설정할 수 있다는 것을 입증하는 것입니다. 그러면 HTML 도우미, 기본 레이아웃 기능 또는 RazorEngine의 TemplateBase가 필요한 모든 것을 구현할 수 있습니다. 상자에서 제공하지 않습니다. – jdmcnair

+0

위의 대답을 명확히했습니다. 나는이 질문이 2 세 이상인 것을 이전에 알아 차렸지만, 아직도이 질문에 답할 것 같아요. 명확하지 않은 것이 있으면 알려주세요. 어쩌면 이것은 여전히 ​​누군가를 도울 것입니다. – jdmcnair