[asp.net] asp.net 외부에서 Razor View Engine을 사용할 수 있습니까?

Razor View Engine을 살펴보면 특히 html 생성과 관련이없는 매우 멋지고 간결한 구문을 볼 수 있습니다. 그래서 “일반적인”.net 환경에서 asp.net 외부의 엔진을 사용하여 텍스트, 코드 등을 생성하는 것이 얼마나 쉬운 지 궁금합니다.

모든 포인터, 예, 설명 또는 설명을 환영합니다.



답변

여기에는 두 가지 문제가 있습니다.

  1. 예, Andrew의 블로그 ( http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of)에 설명 된대로 ASP.NET 앱 도메인의 컨텍스트 외부에서 Razor View Engine을 실행할 수 있습니다. -aspnet-revised-for-mvc3-rc.html
  2. 그러나 Razor는 Razor 파서가 <tags>코드와 태그 간의 전환을 결정하기 위해 존재를 사용한다는 점에서 여전히 xml과 유사한 태그 (예 : HTML)를 생성하는 데 주로 초점을 맞추고 있습니다. 텍스트를 생성하는 데 사용할 수 있지만 출력이 의도가 무엇인지에 대한 Razor의 가정과 일치하지 않으면 문제가 발생할 수 있습니다.

예를 들어 이것은 유효한 Razor 코드이지만 ( <div>태그로 인해 ) :

@if(printHello) {
   <div>Hello!</div>
}

다음 스 니펫은 유효하지 않습니다 (Hello!는 여전히 코드로 취급되기 때문입니다).

@if(printHello) {
   Hello!
}

그러나 <text>여러 줄 블록에 대한 전환을 강제하는 데 사용할 수 있는 특수 태그가 있습니다 ( <text>태그가 렌더링되지 않음).

@if(printHello) {
   <text>Hello!
   Another line</text>
}

다음을 사용하여 한 줄을 강제로 전환하는 더 짧은 구문도 있습니다 @:.

@if(printHello) {
   @:Hello!
}


답변

RazorEngine을 확인하십시오. Razor 위에 구축 된 작은 프레임 워크로이를 수행 할 수 있습니다.


답변

RazorTemplates 라이브러리를 살펴보세요 . RazorEngine 라이브러리보다 가볍고 스레드로부터 안전하며 매우 멋진 최소 인터페이스를 제공합니다.

템플릿 컴파일 및 렌더링은 두 줄의 코드처럼 간단합니다.

var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));


답변

RazorEngineRazorTemplates 모두 여기에 이미 언급되어 있지만 RazorMachine을 확인하십시오 . MVC가 아닌 앱을 (다른) 기존 MVC 앱의 ~ / Views 폴더로 지정하고 적절한 모델을 전송하여 실행하고 두 줄의 코드로 렌더링 된 출력을 얻을 수 있습니다.

var sb = new StringBuilder();

//RazorMachine magic:
//*tweets* is basically List<TwitterPost> - simple collection of custom POCO
//first param for rm.ExecuteUrl points to ~/Views folder, MVC style
var rm = new RazorMachine(htmlEncode: false);
ITemplate template = rm.ExecuteUrl("~/twitter/twitter", tweets);

//do whatever you want with result
sb.Append(template);


답변

코드 또는 텍스트 생성 : T4 템플릿 : http://msdn.microsoft.com/en-us/library/bb126445.aspx 또는 codesmith 도구 와 같은 의미 입니까?


답변