Pergunta

Se eu olhar para o motor View Razor, vejo uma sintaxe muito agradável e concisa que não está particularmente ligada a gerar HTML. Então, eu me pergunto, como seria fácil usar o motor fora do ASP.NET em um ambiente "Normal" .NET, por exemplo, para gerar texto, código, ...

Qualquer ponteiro, exemplo, comentário ou explicação é bem -vindo.

Foi útil?

Solução

Há duas questões aqui:

  1. Sim, você pode executar o motor de visualização de barbear fora do contexto de um domínio do aplicativo ASP.NET, conforme explicado no blog de Andrew: http://vibrantcode.com/blog/2010/11/16/hosting-razor-tonside-of-aspnet-revised-for-mvc3-rc.html
  2. No entanto, Razor ainda está focado principalmente na geração de marcação do tipo XML (por exemplo, HTML) no sentido de que o analisador de barbear usa a presença de <tags> Para determinar a transição entre código e marcação. Você provavelmente pode usá -lo para gerar qualquer texto, mas pode ter problemas quando sua saída não corresponde às suposições da Razor sobre quais são suas intenções.

Por exemplo, enquanto este é um código de barbear válido (devido ao <div> marcação):

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

O snippet a seguir é inválido (porque o Hello! Ainda está sendo tratado como código):

@if(printHello) {
   Hello!
}

No entanto, há um especial <text> tag que pode ser usada para forçar uma transição para blocos de várias linhas (o <text> tag não será renderizado):

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

Há também uma sintaxe mais curta para forçar uma única linha para fazer a transição usando @::

@if(printHello) {
   @:Hello!
}

Outras dicas

Verificar RazorEngine, é uma pequena estrutura construída sobre a navalha que permite que você faça isso.

Dar uma olhada em RazorTemplates biblioteca. É mais leve que a Biblioteca RazorEngine, é segura por threads e tem uma interface mínima muito agradável.

Compilar e tornar um modelo é tão simples quanto duas linhas de código:

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

Ambos RazorEngine e RazorTemplates já são mencionados aqui, mas confira Razormachina. Você pode simplesmente apontar seu aplicativo não-MVC para uma pasta ~/views de (outro) aplicativo MVC existente, executar com o envio de modelo adequado e receber saída renderizada em 2 linhas de código:

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

Gere código ou texto: você quer dizer como modelos T4: http://msdn.microsoft.com/en-us/library/bb126445.aspx ou ferramentas de codesmith?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top