क्या asp.net के बाहर रेजर व्यू इंजन का उपयोग करना संभव है


102

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

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

जवाबों:


80

यहां दो समस्याएं हैं:

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

उदाहरण के लिए, जबकि यह वैध रेजर कोड ( <div>टैग के कारण) है:

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

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

@if(printHello) {
   Hello!
}

हालाँकि, एक विशेष <text>टैग है जिसका उपयोग मल्टी-लाइन ब्लॉकों के लिए संक्रमण को बाध्य करने के लिए किया जा सकता है ( <text>टैग प्रदान नहीं किया जाएगा):

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

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

@if(printHello) {
   @:Hello!
}

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

6
@ थोमास रेजर को उन परिदृश्यों में ठीक करना चाहिए, आपको बस उन जादुई <text>टैगों को जोड़ना होगा या @:फिर हर बार उपयोग करना होगा । एक बार वीएस एडिटर सपोर्ट रेजर सिंटैक्स के लिए सामने आता है तो यह बताना काफी आसान होगा कि ट्रांजेक्शन कब होगा।
बजे

34

RazorEngine की जाँच करें , यह रेजर के शीर्ष पर बना एक छोटा सा ढांचा है जो आपको ऐसा करने की अनुमति देता है।


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

22

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

टेम्पलेट को संकलित और प्रस्तुत करना कोड की दो पंक्तियों की तरह सरल है:

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

1
क्या आप RazorTemplates की धागा सुरक्षा पर प्रकाश डाल रहे हैं b / c इस प्रश्न के अन्य सुझाए गए समाधानों में से एक नहीं है? मैं विशेष रूप से RazorEngine में रुचि रखता हूं।
स्टीव शेफ़लर

9

RazorEngine और RazorTemplates दोनों पहले से ही यहां बताए गए हैं, लेकिन RazorMachine देखें । आप अपने गैर-एमवीसी ऐप को ~ (किसी अन्य) मौजूदा MVC ऐप के ~ / Views फ़ोल्डर में इंगित कर सकते हैं, उचित मॉडल भेजने के साथ निष्पादित कर सकते हैं और कोड की 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);

3

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


इसके लिए upvotes की आवश्यकता है क्योंकि T4 में रेज़र से समानताएं हैं और यह एक वास्तविक ऑल-पर्पस कोड जनरेटर है जो कि विजुअल स्टूडियो में एक फीचर के रूप में बॉक्स से बाहर निकलता है - अनिवार्य रूप से यह एक ऑल-पर्पज 'रेज़र' है
Dan Ling

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

संभवतया, जब तक यह उत्पन्न हो रहा है, तब तक इसकी व्याख्या की जा सकती है, जैसे CSHTML रनटाइम पर रेजर इंजन द्वारा हो सकती है। आप प्रोग्राम को कोड जनरेट करने के लिए इसे ट्रिगर कर सकते हैं, लेकिन संकलित कोड को कंपाइलर द्वारा उपयोग किए जाने योग्य होना चाहिए ....
ब्रायन मेन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.