Apakah mungkin menggunakan Razor View Engine di luar asp.net

102

Jika saya melihat Razor View Engine, maka saya melihat sintaks yang sangat bagus dan ringkas yang tidak terlalu terkait dengan pembuatan html. Jadi saya bertanya-tanya, betapa mudahnya menggunakan mesin di luar asp.net dalam lingkungan .net "normal" misalnya untuk menghasilkan teks, kode, ...

Setiap penunjuk, contoh, komentar atau penjelasan diperbolehkan.

Thomas
sumber

Jawaban:

80

Ada dua masalah di sini:

  1. Ya, Anda dapat menjalankan Razor View Engine di luar konteks domain aplikasi ASP.NET, seperti yang dijelaskan di blog Andrew: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of -aspnet-direvisi-untuk-mvc3-rc.html
  2. Namun, Razor masih fokus utama pada pembuatan markup seperti xml (misalnya HTML) dalam arti bahwa Razor parser menggunakan keberadaan <tags>untuk menentukan transisi antara kode dan markup. Anda mungkin dapat menggunakannya untuk menghasilkan teks apa pun tetapi Anda mungkin mengalami masalah ketika output Anda tidak sesuai dengan asumsi Razor tentang apa niat Anda.

Jadi misalnya saat ini adalah kode Razor yang valid (karena <div>tag):

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

Cuplikan berikut tidak valid (karena Hello! Masih diperlakukan sebagai kode):

@if(printHello) {
   Hello!
}

Namun ada <text>tag khusus yang dapat digunakan untuk memaksa transisi untuk blok multi-baris ( <text>tag tidak akan dirender):

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

Ada juga sintaks yang lebih pendek untuk memaksa satu baris bertransisi menggunakan @::

@if(printHello) {
   @:Hello!
}
marcind
sumber
2
Saya sedang berpikir tentang menggunakannya untuk menghasilkan hal-hal seperti email atau pembuatan kode IronPython secara langsung. Karena ini tidak menggunakan tag, mungkin lebih baik melihat alternatif lain. Terima kasih atas jawabannya.
Thomas
6
@Thomas Razor seharusnya baik-baik saja dalam skenario itu, Anda hanya perlu menambahkan <text>tag ajaib atau menggunakannya @:sesekali. Setelah dukungan editor VS keluar untuk sintaks Razor, akan sangat mudah untuk mengetahui kapan transisi terjadi.
marcind
34

Periksa RazorEngine , ini adalah kerangka kerja kecil yang dibangun di atas Razor yang memungkinkan Anda melakukan ini.

Ariel
sumber
Mengalami masalah saat menginstal proyek ini pada aplikasi penargetan .net 4, memerlukan pembaruan.
Johnny_D
22

Lihatlah perpustakaan RazorTemplates . Ini lebih ringan daripada pustaka RazorEngine, ini aman untuk utas dan memiliki antarmuka minimal yang sangat bagus.

Mengompilasi dan merender template sesederhana dua baris kode:

var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
alexey
sumber
1
Apakah Anda menyoroti keamanan utas RazorTemplates b / c salah satu solusi lain yang disarankan untuk pertanyaan ini tidak? Saya tertarik secara khusus pada RazorEngine.
Steve Scheffler
9

Baik RazorEngine dan RazorTemplates sudah disebutkan di sini, tetapi periksa RazorMachine . Anda cukup mengarahkan aplikasi non-MVC Anda ke folder ~ / Views dari aplikasi MVC (lain) yang ada, mengeksekusi dengan mengirimkan model yang tepat dan mendapatkan keluaran yang dirender pada 2 baris kode:

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);
Antonin Jelinek
sumber
3

Buat kode atau teks: maksud Anda seperti Template T4: http://msdn.microsoft.com/en-us/library/bb126445.aspx atau alat pembuat kode?

Brian Mains
sumber
Ini membutuhkan suara positif karena T4 memiliki kemiripan dengan Razor dan merupakan generator kode serba guna aktual yang dikirimkan keluar kotak sebagai fitur dalam Visual Studio - pada dasarnya ini adalah 'Razor' serba guna
Dan Ling
Menurut pemahaman saya, template T4 hanya dapat diubah pada waktu kompilasi, file .tt diubah menjadi dan disimpan sebagai file .cs. Dalam penggunaan saya, pengguna semi teknis ingin memperbarui template tanpa harus membangun kembali aplikasi. Adakah cara mudah untuk melakukannya dengan menggunakan template T4?
daveb
Mungkin saja, selama apa pun yang dihasilkannya dapat diinterpretasikan, seperti CSHTML dapat dilakukan oleh mesin Razor saat runtime. Anda juga dapat memicunya secara terprogram untuk menghasilkan kode, tetapi kode yang dikompilasi harus diurai oleh kompiler agar dapat digunakan ....
Brian Mains