Razor View Engine'i asp.net dışında kullanmak mümkün mü


102

Razor View Engine'e bakarsam, özellikle html oluşturmaya bağlı olmayan çok güzel ve öz bir sözdizimi görüyorum. Bu yüzden, asp.net dışındaki motoru "normal" .net ortamında örneğin metin, kod, ... oluşturmak için kullanmanın ne kadar kolay olacağını merak ediyorum.

Herhangi bir işaretçi, örnek, yorum veya açıklama açığız.

Yanıtlar:


80

Burada iki konu var:

  1. Evet, Andrew'un blogunda açıklandığı gibi Razor View Engine'i ASP.NET uygulama etki alanının bağlamı dışında çalıştırabilirsiniz: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of -aspnet-revize-for-mvc3-rc.html
  2. Bununla birlikte, Razor, Razor ayrıştırıcısının <tags>kod ve biçimlendirme arasındaki geçişi belirlemek için varlığını kullanması anlamında, hala öncelikle xml benzeri işaretleme (örneğin, HTML) oluşturmaya odaklanmıştır . Muhtemelen herhangi bir metin oluşturmak için kullanabilirsiniz, ancak çıktınız Razor'un niyetlerinizle ilgili varsayımlarıyla eşleşmediğinde sorunlarla karşılaşabilirsiniz.

Örneğin, bu geçerli Razor kodu iken ( <div>etiketi nedeniyle ):

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

Aşağıdaki kod parçası geçersiz (çünkü Merhaba! Hâlâ kod olarak değerlendiriliyor):

@if(printHello) {
   Hello!
}

Bununla birlikte <text>, çok satırlı bloklar için bir geçişi zorlamak için kullanılabilecek özel bir etiket vardır ( <text>etiket oluşturulmayacaktır):

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

Aşağıdakileri kullanarak tek bir satırı geçişe zorlamak için daha kısa bir sözdizimi de vardır @::

@if(printHello) {
   @:Hello!
}

2
E-postalar veya anında IronPython kod üretimi gibi şeyler oluşturmak için kullanmayı düşünüyordum. Bunlar etiket kullanmadığından, diğer alternatiflere bakmak muhtemelen daha iyidir. Cevap için teşekkürler.
Thomas

6
@Thomas Razor bu senaryolarda gayet iyi davranmalı, sadece bu sihirli <text>etiketleri eklemeniz veya ara sıra kullanmanız gerekecek @:. Razor sözdizimi için VS düzenleyici desteği çıktığında, geçişlerin ne zaman gerçekleştiğini söylemek oldukça kolay olacaktır.
marcind

34

RazorEngine'i kontrol edin , bunu yapmanıza izin veren Razor üzerine inşa edilmiş küçük bir çerçeve.


Bu projeyi .net 4 hedefleme uygulamasına yüklerken sorunlar yaşandı, güncelleme gerektiriyor.
Johnny_D

22

RazorTemplates kitaplığına bir göz atın . RazorEngine kitaplığından daha hafif, iş parçacığı açısından güvenli ve çok hoş bir minimal arayüze sahip.

Bir şablonu derlemek ve oluşturmak iki satır kod kadar basittir:

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

1
RazorTemplates'in iş parçacığı güvenliğini vurguluyor musunuz, b / c bu soru için önerilen diğer çözümlerden biri değil mi? RazorEngine ile özellikle ilgileniyorum.
Steve Scheffler

9

Hem RazorEngine ve RazorTemplates zaten burada bahsedilen, ama kontrol edilir RazorMachine . MVC olmayan uygulamanızı mevcut (başka bir) MVC uygulamasının ~ / Views klasörüne yönlendirebilir, uygun modeli göndererek çalıştırabilir ve 2 satır kod üzerinde işlenmiş çıktı alabilirsiniz:

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

Kod veya metin oluşturun: T4 Şablonları gibi mi demek istiyorsunuz: http://msdn.microsoft.com/en-us/library/bb126445.aspx veya kod ustası araçları?


Bu ihtiyaçlar upvotes T4 Razor benzerlikler vardır ve Visual Studio'da bir özellik olarak kutunun dışında gemiler o gerçek bir çok amaçlı kod üreteci olduğu için - aslında bir çok amaçlı 'Razor' var
Dan Ling

Anladığım kadarıyla T4 şablonları yalnızca derleme sırasında değiştirilebilir, .tt dosyası .cs dosyasına dönüştürülür ve kaydedilir. Benim kullanımımda, yarı teknik bir kullanıcı uygulamayı yeniden inşa etmek zorunda kalmadan şablonu güncellemek istiyor. T4 şablonlarını kullanarak bunu başarmanın kolay bir yolu var mı?
daveb

Muhtemelen, ürettiği her şey yorumlanabildiği sürece, CSHTML gibi çalışma zamanında Razor motoru tarafından yapılabilir. Ayrıca kod üretmek için programlanabilir şekilde tetikleyebilirsiniz, ancak derlenen kodun kullanılabilir olması için derleyici tarafından ayrıştırılması gerekir ....
Brian Mains
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.