답변:
여기에는 두 가지 문제가 있습니다.
<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!
}
<text>
태그 를 추가 하거나 가끔 사용해야합니다 @:
. Razor 구문에 대한 VS 편집기 지원이 나오면 전환이 발생하는시기를 쉽게 알 수 있습니다.
RazorEngine을 확인하십시오. Razor 위에 구축 된 작은 프레임 워크로이를 수행 할 수 있습니다.
RazorTemplates 라이브러리를 살펴보세요 . RazorEngine 라이브러리보다 가볍고 스레드로부터 안전하며 매우 멋진 최소 인터페이스를 제공합니다.
템플릿 컴파일 및 렌더링은 두 줄의 코드처럼 간단합니다.
var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
RazorEngine 과 RazorTemplates 모두 여기에 이미 언급되어 있지만 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 도구 와 같은 의미 입니까?