2014-11-11 8 views
12

मैं रेजोरइंजिन को कॉन्फ़िगर करने की कोशिश कर रहा हूं ताकि इंटेलिजेंस विचारों पर काम करे। मैं nuget का उपयोग कर RazorEngine और Microsoft.AspNet.Mvc जोड़ता हूं। मैं TestView.cshtml बनाता हूं और @model MyModel घोषित करता हूं लेकिन यह The name 'model' does not exist in the current context कहता है। मैं दृश्य के अंदर इंटेलिजेंस का भी उपयोग नहीं कर सकता।रेजोरइंजिन के साथ इंटेलिजेंस कैसे काम करता है?

क्या मुझे यहां कोई कदम याद आ रहा है? दृश्य में इंटेलिजेंस कैसे सक्षम करें?

+0

आपको एक उदाहरण (मुझे लगता है आप का उपयोग करना चाहिए 'Model', नहीं' model') –

+0

आप मौका एक वर्ग पुस्तकालय के माध्यम से बढ़ा कर रहे हैं दे सकते हैं? बस उत्सुक। – lemunk

+0

कि वास्तव में मॉडल घोषणा के लिए सही सिंटैक्स है।बाद में इसे @Model का उपयोग करने के लिए संदर्भित किया जाता है। एमवीसी का क्या संस्करण? – markpsmith

उत्तर

26

आप अपने टेम्पलेट की चोटी पर

@using RazorEngine.Templating 
@using Namespace.Of.My.Model 
@inherits TemplateBase<MyModel> 

उपयोग कर सकते हैं।

यह विजुअल स्टूडियो 2013 (रेजोरइंजिन के संदर्भ को जोड़ने के बाद) के साथ एक नए कंसोल एप्लिकेशन पर ठीक काम करता है। इसके लिए प्रलेखन here है।

संपादित करें:

मैंने देखा है कि यह केवल काम करता है जब RazorEngine परियोजना समाधान में जोड़ा जाता है और सीधे संदर्भित किया है। आप NuGet पैकेज का उपयोग करते हैं आप अतिरिक्त यह काम करने के लिए निम्न में से एक सुनिश्चित करने की आवश्यकता:

  1. आपका परियोजना उत्पादन पथ bin\ बजाय bin\Debug\ और bin\Release\ को तैयार है।
  2. कॉपी RazorEngine.dll और System.Web.Razor.dllbin\
+5

कहा जाना चाहिए था लेकिन मुझे @inherits RazorEngine.Templating का उपयोग करने की आवश्यकता है .TemplateBase। पहला उपयोग कथन मेरे लिए काम नहीं करता है। – Dummy

4

लिए ओह, मैं अपने कस्टम dll परियोजना के लिए रेजर इंजन को जोड़ते समय इस तरह की समस्या से सामना करना पड़ा। इसे सुलझाने के लिए आपके पास करने के लिए:

वेब कॉन्फ़िग फ़ाइल में

1.correctly सेटअप नेमस्पेस (, आशा है कि आप बार देखा गया फ़ोल्डर में नहीं हैं - MVC परियोजना से कॉपी करें):

<system.web.webPages.razor> 
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
<pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" />  
    <add namespace="System.Web.Optimization" /> 
    </namespaces> 
</pages> 
</system.web.webPages.razor> 
... 

2.Use निर्माण करने के लिए bin\ पथ (न कि किसी अन्य की नकल के बाद निर्माण, तो आप उपयोग कर सकते हैं आदेश एक अन्य जगह पर स्थानांतरित करने के लिए परिणाम)

3.clean समाधान और में मेरे विचारों 'कोड fr शुरू होता है की तुलना में

निर्माण, obj और bin फ़ोल्डर भी निकाल ओम और सब ठीक

2

काम करता है मैं जानता हूँ कि इस सवाल का वर्ष की तरह है। मुझे समाधान करने के लिए कुछ भी नहीं मिला, समाधान से कोई फर्क नहीं पड़ता। मेरे पास एक हैक फिक्स है जो कुछ के लिए सुखद हो सकता है। मुझे यह बहुत पसंद नहीं है, लेकिन यह अब तक की सबसे उपयोगी चीज है जिसे मैंने अभी तक प्राप्त किया है।

चाल "मॉडल" को वास्तविक मॉडल से एक चर के रूप में परिभाषित करना है। मैं के रूप में "TrueModel" यह परिभाषित है, लेकिन जो भी नाम आपको लगता है कि "मॉडल" या "मॉडल" के साथ भिड़ना नहीं करता है के बारे में सोच सकते हैं काम करना चाहिए। फिर बस "TrueModel" के साथ "मॉडल" के अपने सभी उदाहरणों को प्रतिस्थापित करें।

@using Namespace.To.My.Models 
@* This line should still look like an error, 
    but we only really care about the intellisense in the rest of the .cshtml file. *@ 
@{ ModelType TrueModel = (ModelType)Model; } 

<div> 
@TrueModel.MyProperty is here now. 
</div> 
<p> @TrueModel.MyOtherProperty is great! </p> 

यह एक अच्छा समाधान नहीं है, लेकिन यह उपयोगी हो सकता है।

+0

हाय @ ज़ैचरी डॉव यह मेरे लिए काम नहीं कर रहा है, मेरे पास ईमेल मॉडल नाम के साथ फ़ोल्डर मॉडल के तहत एक मॉडल था, मेरे पास टेम्पलेट के तहत एक ईमेल टेम्पलेट है जिसका नाम ईमेल टेम्पलेट है। मैंने '@ {ईमेलमोडेल ट्रूमोडेल = (ईमेलमोडेल) ईमेल मॉडल लिखा था; } 'और यह काम नहीं कर रहा है –

+0

क्या आप इस –

+0

@ManojKalluri में मेरी मदद कर सकते हैं "यह काम नहीं कर रहा है" मुझे बहुत कुछ नहीं बता रहा है। दूसरा, "मॉडल" एमवीसी में एक विशेष संपत्ति है। तो आप इसे इस तरह दिखने के लिए बदलना चाहेंगे: '@ {ईमेल मॉडल TrueModel = (ईमेल मॉडल) मॉडल; } 'शायद। –

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