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


102

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

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

답변:


80

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

  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!
}

2
글쎄요 저는 그것을 사용하여 이메일이나 즉석 IronPython 코드 생성과 같은 것을 생성하는 것에 대해 생각하고있었습니다. 이들은 태그를 사용하지 않으므로 다른 대안을 살펴 보는 것이 좋습니다. 답변 해주셔서 감사합니다.
토마스

6
@Thomas Razor는 이러한 시나리오에서 잘 작동해야합니다. 매직 <text>태그 를 추가 하거나 가끔 사용해야합니다 @:. Razor 구문에 대한 VS 편집기 지원이 나오면 전환이 발생하는시기를 쉽게 알 수 있습니다.
2010 년

34

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


.net 4 대상 응용 프로그램에이 프로젝트를 설치하는 데 문제가 있었으며 업데이트가 필요합니다.
Johnny_D 2014-06-24

22

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

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

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

1
이 질문에 대한 다른 제안 된 솔루션 중 하나가 아닌 RazorTemplates b / c의 스레드 안전성을 강조하고 있습니까? 특히 RazorEngine에 관심이 있습니다.
Steve Scheffler

9

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

3

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


이 요구의 upvotes T4는 면도기에 유사점을 가지고 있으며, 비주얼 스튜디오의 기능으로 상자 밖으로 선박 것을 실제 모든 목적의 코드 생성기이기 때문에 - 기본적으로는 모든 용도 '면도기'이다
댄 링

T4 템플릿은 컴파일 타임에만 변경할 수 있으며 .tt 파일은 .cs 파일로 변환되어 저장됩니다. 내 사용에서 준 기술 사용자는 응용 프로그램을 다시 빌드하지 않고 템플릿을 업데이트하고 싶습니다. T4 템플릿을 사용하여이를 달성 할 수있는 쉬운 방법이 있습니까?
daveb

CSHTML처럼 런타임에 Razor 엔진이 생성하는 것과 같이 무엇을 생성하든 해석 할 수있는 한 가능합니다. 또한 프로그램 적으로는 코드를 생성하는 트리거 할 수 있지만, 컴파일 된 코드는 가능한 것으로 컴파일러에 의해 해석되어야한다 ...
브라이언 메인
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.