É possível utilizar uma view do ASP.NET MVC Razor como um template para gerar um html. Isso pode ser utilizado por exemplo para você ter um template padrão HTML do texto de um e-mail, que é preenchido em tempo de execução com os dados do usuário antes do envio do e-mail, ou então você pode ter um HTML padrão que deve ser preenchido com dados para cada item de um grid e esses dados são carregado através de Ajax.
Os passos para realizar esse processo são os seguintes:
Adicionar a referência do RazorEngine no projeto
Criar uma view Razor com as marcações padrões do Razor para preencher com os dados da Model, como: “@Model.UsuarioNome”
Utilizar o código “RazorEngine.Razor.Parse(viewCode, model)” para fazer o bind da Model com a ViewModel e obter o HTML
1- Exemplo
Abaixo, um exemplo de como imprimindo na página o Html gerado a partir do template do Razor:
1- Crie um projeto ASP.NET MVC vazio com o padrão de ViewEngine “Razor”
2- Instale o RazorEngine no seu projeto, você pode fazer isso de duas formas:
a) Adicionando as referências manualmente no seu projeto, depois de baixar os arquivos em:
b) Utilizando o nuget, que é o processo mais fácil e que eu recomendo:
Clique com o botão direito sobre a pasta “References” do seu projeto Web e escolha a opção: “Add Library Package Reference”
Escolha a opção para buscar arquivos “on-line”, pesquise por “RazorEngine” e clique na opção “Install”
3- Crie uma Controller com o nome “HomeController”
botão direito sobre a Pasta “Controllers” opção [Add / Controller]
nome: “HomeController”;
4- Crie uma ViewModel com o nome “EmailLembreteSenha”
crie uma pasta “ViewModel”
botão direito sobre essa pasta, escolha a opção [Add / New Item]
escolha a opção “Class”
digite o nome “EmailLembreteSenha”
adicione o código abaixo para a classe que conterá os dados do usuário que serão substituidos no e-mail (será o Model da View que trabalhará como Template do email):
5- Compile a aplicação, para que a nova ViewModel apareça no wizard de criação de Views
6- Crie uma View com o nome “TemplateEmailLembreteSenha” utilizando como “Model class” a classe “EmailLembreteSenha”
clique com o botão direito sobre a pasta Views, escolha a opção [Add / View]
digite o nome da View: “TemplateEmailLembreteSenha”
escolha a View Engine “Razor”
marque a opção “Create a strongly-typed view”
selecione a ViewModel: “EmailLembreteSenha (TemplateRazor.ViewModel)”
O código dessa View será o seguinte:
7- Na HomeController, adicione o seguinte código:
Detalhando esse código passo-a-passo:
Criamos um objeto ViewModel e preenchemos ele com os dados do usuário para envio do e-mail:
Obtemos o código da View que estamos utilizando como template:
Removemos do código dessa View de Template a primeira linha, que tem a indicação da ViewModel que é utilizada (@model TemplateRazor.ViewModel.EmailLembreteSenha):
A instrução @model não é interpretada pelo RazorEngine então precisa ser removida, senão ocorrerá o seguinte erro:
Fazemos o bind do Template com os dados do usuário:
Depois dessa instrução, a variável “html” conterá o html final para envio do e-mail (juntando o template e os dados do usuário).
O trecho final do código é apenas para enviar esse html para a view da Home, para que o nosso exemplo apresente o HTML na página:
Os próximos passos complementam a apresentação desse HTML na página, para efeitos de teste:
8- No código anterior, clique sobre o botão direito do mouse em “return View();” escolha a opção “Add View” e crie uma View “Index”, que não precisa fazer bind com nenhuma ViewModel, adicione nessa view o código abaixo:
9- Ao executar o projeto, será exibido o HTML do template preenchido com os dados da Model: