2010-09-02 4 views
94

के बाहर रेजर व्यू इंजन का उपयोग करना संभव है यदि मैं रेजर व्यू इंजन को देखता हूं, तो मुझे एक बहुत अच्छा और संक्षिप्त वाक्यविन्यास दिखाई देता है जो विशेष रूप से HTML उत्पन्न करने के लिए बंधे नहीं है। तो मुझे आश्चर्य है, "सामान्य" .net वातावरण में एएसपीनेट के बाहर इंजन का उपयोग करना कितना आसान होगा उदाहरण के लिए पाठ, कोड, ...क्या एएसपीनेट

कोई भी सूचक, उदाहरण, टिप्पणी या स्पष्टीकरण स्वागत है ।

उत्तर

70

यहां दो मुद्दे हैं: के रूप में एंड्रयू ब्लॉग में बताया गया है,

  1. हाँ, आप एक ASP.NET अनुप्रयोग डोमेन के संदर्भ से बाहर उस्तरा दृश्य इंजन चला सकते हैं: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
  2. हालांकि
  3. , रेजर कोड और मार्कअप के बीच संक्रमण को निर्धारित करने के लिए रेजर पार्सर <tags> की उपस्थिति का उपयोग करता है, इस अर्थ में एक्सएमएल-जैसे मार्कअप (जैसे एचटीएमएल) उत्पन्न करने पर मुख्य रूप से केंद्रित है। आप संभवतः किसी भी पाठ को उत्पन्न करने के लिए इसका उपयोग कर सकते हैं, लेकिन जब आप अपना आउटपुट अपने इरादे के बारे में रेजर की धारणाओं से मेल नहीं खाते हैं तो आप समस्याओं में भाग ले सकते हैं।

इसलिए उदाहरण के लिए, जबकि इस (<div> टैग की वजह से) मान्य उस्तरा कोड है:

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

निम्नलिखित स्निपेट अमान्य है (क्योंकि हैलो अभी भी कोड के रूप में इलाज किया जा रहा है!):

@if(printHello) { 
    Hello! 
} 

लेकिन वहाँ एक विशेष <text> टैग कि बहु लाइन ब्लॉक (<text> टैग गाया नहीं किया जाएगा) के लिए एक संक्रमण के लिए मजबूर किया जा सकता है है:

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

वहाँ भी है @: का उपयोग कर संक्रमण के लिए एक लाइन के लिए मजबूर करने के लिए एक छोटे वाक्य रचना:

@if(printHello) { 
    @:Hello! 
} 
+2

वैसे मैं ई-मेल या ऑन-द-फ्लाई आयरनपीथन कोड जैसी चीज़ों को उत्पन्न करने के लिए इसका उपयोग करने के बारे में सोच रहा था पीढ़ी। चूंकि ये टैग का उपयोग नहीं करते हैं, इसलिए संभवतः अन्य विकल्पों को देखना बेहतर है। जवाब के लिए धन्यवाद। – Thomas

+6

@ थॉमस रेजर को उन परिदृश्यों में ठीक करना चाहिए, आपको बस उन जादू '' टैग जोड़ना होगा या फिर हर बार और @ @: 'का उपयोग करना होगा। एक बार जब वीएस संपादक समर्थन रेजर सिंटैक्स के लिए आता है तो संक्रमणों के बारे में बताने में काफी आसान होगा। – marcind

3

कोड या टेक्स्ट जेनरेट करें: आपका मतलब टी 4 टेम्पलेट्स: http://msdn.microsoft.com/en-us/library/bb126445.aspx या कोडमिथ टूल्स की तरह है?

+0

यह upvotes जरूरत है क्योंकि टी -4 है रेजर की समानताएं और एक वास्तविक ऑल-ऑब्जेक्ट कोड जेनरेटर है जो विजुअल स्टूडियो में एक सुविधा के रूप में बॉक्स से बाहर निकलता है - अनिवार्य रूप से यह एक सर्व-उद्देश्य 'रेजर' –

+0

है यह मेरी समझ है कि टी 4 टेम्पलेट्स को संकलन समय में ही बदला जा सकता है, .tt फ़ाइल को .cs फ़ाइल के रूप में परिवर्तित और सहेजा जाता है।मेरे उपयोग में एक अर्ध-तकनीकी उपयोगकर्ता एप्लिकेशन को पुनर्निर्माण किए बिना टेम्पलेट को अपडेट करना चाहता है। क्या कोई आसान तरीका है कि यह टी 4 टेम्पलेट्स का उपयोग करके हासिल किया जा सकता है? – daveb

+0

अच्छी तरह से, जब तक जो भी उत्पन्न हो रहा है, इसका अर्थ समझा जा सकता है, जैसे सीएसएचटीएम रनटाइम पर रेजर इंजन द्वारा किया जा सकता है। आप कोड उत्पन्न करने के लिए इसे प्रोग्रामर ट्रिगर भी कर सकते हैं, लेकिन संकलित कोड को कंपाइलर द्वारा उपयोग करने योग्य होने के लिए पार्स किया जाना चाहिए .... –

32

चेक RazorEngine, यह रेजर के ऊपर एक बने एक छोटे से रूपरेखा है कि आप ऐसा करने की अनुमति देता है है।

+0

.net 4 लक्ष्यीकरण अनुप्रयोग पर इस प्रोजेक्ट को स्थापित करने में समस्याएं थीं, अपडेट की आवश्यकता है। –

+0

एटीएम काम नहीं करता है। मैं एक और विकल्प की तलाश में हूं। –

18

RazorTemplates लाइब्रेरी पर एक नज़र डालें। यह रेजोरइंजिन लाइब्रेरी की तुलना में अधिक हल्का है, यह थ्रेड-सुरक्षित है और इसमें बहुत अच्छा इंटरफ़ेस है।

संकलन और एक टेम्पलेट प्रतिपादन कोड के दो लाइनों के रूप में के रूप में सरल है:

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

क्या आप इस सवाल के लिए अन्य सुझाए गए समाधानों में से एक RazorTemplates की थ्रेड सुरक्षा को हाइलाइट कर रहे हैं? मुझे विशेष रूप से रेजोरइंजिन में दिलचस्पी है। –

+1

इस परियोजना को लंबे समय तक अपडेट नहीं किया गया है। –

7

दोनों RazorEngine और RazorTemplates पहले से ही यहाँ उल्लेख कर रहे हैं, लेकिन RazorMachine की जाँच करें। आप बस (एक और) मौजूदा MVC एप्लिकेशन का एक ~/दृश्य फ़ोल्डर में अपने गैर MVC एप्लिकेशन इंगित कर सकते हैं, उचित मॉडल भेजने के साथ निष्पादित और कोड के 2 तर्ज पर गाया आउटपुट प्राप्त:

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