2012-05-03 8 views
7

मैं RazorEngine साथ निम्नलिखित उस्तरा टेम्पलेट का उपयोग करना चाहते हैं:RazorEngine - उपयोग लेआउट और Html.Raw

@{ 
    Layout = null; 
} 

@Html.Raw(MyNamespace.MyClass.SomePropertyWithHtml) 

जब मैं इसे कहते 2 त्रुटियों मिल - एक शिकायत यह लेआउट को संभाल नहीं कर सकते हैं और एक अन्य शिकायत यह नहीं जानता कि एचटीएमएल सहायक से कैसे निपटें।

यहां अन्य प्रश्न और उत्तर हैं जो सुझाव देते हैं कि यह v3 में संभव है, और मैं NuGet - v3.0.8 पर वर्तमान पैकेज का उपयोग कर रहा हूं - लेकिन यह स्पष्ट नहीं है कि यह कैसे किया जाता है। सुझाव है कि

string html = RazorEngine.Razor.Parse(File.ReadAllText(path)); 

अन्य उत्तर पहले Razor.SetBaseTemplate का उपयोग, जो वर्तमान स्रोत या Git पर 3.0 शाखा में प्रकट नहीं होता: वर्तमान में मैं इतना है कि यह फोन कर रहा हूँ। कोड को देखते हुए मुझे लेआउट और अनुभागों का संदर्भ कोड दिखाई देता है, लेकिन लेआउट कोड नाम से टेम्पलेट को हल करने पर निर्भर करता है, जबकि मैं जो करने की कोशिश कर रहा हूं उसे टेम्पलेट को हल करने की भी आवश्यकता नहीं है - मुझे बस इसे सामना करने की आवश्यकता है लेआउट = शून्य के साथ। कोड में एक एमवीसी टेम्पलेटबेस भी शामिल है जो वेब प्रोजेक्ट में एचटीएमएलहेल्पर पेश करता प्रतीत होता है - लेकिन यह उस प्रोजेक्ट में एकमात्र वर्ग है और वेब या कोर प्रोजेक्ट्स में कहीं भी संदर्भित नहीं है।

यह समान प्रश्न: RazorEngine issues with @Html

बस मुखपृष्ठ के लिए लिंक तुम वहाँ और अधिक जानकारी प्राप्त कर सकते हैं कह रही है - होमपेज पर बस एक छोटी परियोजना का वर्णन वाक्य है।

तो, मैं रेजोरइंजिन v3.0 के साथ उपरोक्त रेजर व्यू को कैसे पार्स करूं?

+0

ओह, तुम RazorEngine उपयोग कर रहे हैं ... ध्यान में रखना एक बात है कि उस्तरा MVC नहीं है। नए रेजोरइंजिन के साथ बहुत सारे काम किए गए हैं लेकिन अंतरीस हाल ही में व्यस्त रहा है। इसका उपयोग करने के लिए आपको अपनी फ़ाइल के शीर्ष पर '@inherits MvcTemplateBase ' का उपयोग करने में सक्षम होना चाहिए। – Buildstarted

+2

सुझाव के लिए धन्यवाद। मुझे पता है कि रेजर और एमवीसी अलग हैं, लेकिन मेरा लक्ष्य सामान्य एएसपी.Net पाइपलाइन के अंदर और बाहर एक ही एमवीसी रेजर टेम्पलेट्स का उपयोग करना है। NuGet पर संस्करण में MvcTemplateBase नामक कक्षा नहीं है। गिट पर नवीनतम संस्करण करता है, लेकिन यह सामान्य नहीं है - यह सिर्फ एमवीसी टेम्पलेटबेस है। अगर मैं @inherits RazorEngine.Razor.MvcTemplateBase जैसी लाइन जोड़ता हूं तो मुझे टेम्पलेट सेवा में एक अपवाद मिलता है। सैममोडेल एक्स्प्लिट टेम्पलेट प्रकार की शिकायत करने के लिए मॉडल नामक कोई संपत्ति नहीं है। विचार? –

उत्तर

2

Layout संपत्ति और Html सहायक TemplateBase का एक हिस्सा है, और MvcTemplateBase के कार्यान्वयन कि RazorEngine (v3.4.1) के नवीनतम संस्करण का एक हिस्सा है नहीं कर रहे हैं अधूरा प्रतीत होता है (InitHelpers सहायकों प्रारंभ करने में प्रतीत नहीं होता ?)। आपको अपना खुद का बेस टेम्पलेट बनाना होगा जो इन सुविधाओं को लागू करता है।

जैसा कि आपने देखा है, v3 + संस्करणों में Razor.SetBaseTemplate विधि शामिल नहीं है। तुम इतनी तरह वर्तमान संस्करण में एक आधार टेम्पलेट प्रकार सेट कर सकते हैं:

var config = new RazorEngine.Configuration.TemplateServiceConfiguration 
    { 
     BaseTemplateType = typeof(MyTemplateBase<>) 
    }; 

using (var service = new RazorEngine.Templating.TemplateService(config)) 
{ 
    Razor.SetTemplateService(service); 
    return MvcHtmlString.Create(Razor.Parse<TModel>(templateText, model)); 
} 

आप सहायकों प्रारंभ करने की आवश्यकता है, तो यह जो की तरह TemplateServiceConfiguration के लिए प्रदान की जा सकती है IActivator के एक कस्टम कार्यान्वयन, में CreateInstance ओवरराइड करने के लिए सहायक हो सकता है BaseTemplateType:

var config = new RazorEngine.Configuration.TemplateServiceConfiguration 
    { 
     BaseTemplateType = typeof(MyTemplateBase<>), 
     Activator = new MyActivator() 
    }; 
+0

हम्म आप रेजोरइंजिन का किस संस्करण का उपयोग कर रहे हैं? या आपने एमवीसी टेम्पलेटबेस को अपनी कक्षा के रूप में प्राप्त किया था? वर्तमान स्रोत में MvcTemplateBase का सामान्य संस्करण नहीं है: https://github.com/Antaris/RazorEngine/blob/master/src/Web/RazorEngine.Mvc/MvcTemplateBase.cs –

+0

यह MvcTemplateBase का एक गृहनिर्माण कार्यान्वयन है।उपर्युक्त बिंदु यह दर्शाता है कि आप अभी भी * अपने सभी विचारों को प्राप्त करने के लिए मूल टेम्पलेट सेट कर सकते हैं, जिससे आप एचटीएमएल सहायक, आधार लेआउट कार्यक्षमता को लागू करने की अनुमति देंगे, या जो कुछ भी आपको चाहिए उसे चाहिए RazorEngine's TemplateBase बॉक्स से बाहर नहीं है। – jdmcnair

+0

ऊपर मेरे उत्तर स्पष्ट। मैंने पहले देखा था कि यह प्रश्न 2 साल से अधिक पुराना है, लेकिन मुझे लगता है कि यह अभी भी इसका उत्तर देता है। अगर कुछ अस्पष्ट है तो मुझे बताएं। शायद यह अभी भी किसी की मदद करेगा। – jdmcnair

संबंधित मुद्दे