2011-04-18 12 views
16

मैं एएसपी.नेट एमवीसी 3 और रेजर दृश्यों के साथ पोर्टेबल दृश्यों का उपयोग करने की कोशिश कर रहा हूं क्योंकि यह एक आसान प्लग-इन आर्किटेक्चर बनाने का सबसे अच्छा तरीका है। तो मेरे पास मेरी कक्षा लाइब्रेरी सेटअप है और मेरे पास मेरा दृश्य /Views/Admin/Index.cshtml में स्थित है और इसे एंबेडेड संसाधन के रूप में सेट किया गया है। इसके बाद मैं उस परियोजना को मुख्य वेब एप्लिकेशन प्रोजेक्ट के लिए निर्भरता के रूप में शामिल करता हूं। जब मैं व्यवस्थापक नियंत्रक तक पहुंचने का प्रयास करता हूं, इंडेक्स एक्शन मुझे एक संदेश मिलता है जो उस दृश्य फ़ाइल को नहीं ढूंढ सकता है (इसलिए नियंत्रक को ठीक से शामिल किया जा रहा है)। मुझे लगता है कि यह मुख्य वेब एप्लिकेशन प्रोजेक्ट में देखने की कोशिश कर रहा है, न कि पोर्टेबल क्षेत्रों बाइनरी। पोर्टेबल क्षेत्रों के साथ काम करने के लिए रेज़र विचारों को पाने का कोई तरीका है?एएसपी.नेट एमवीसी 3, रेजर व्यू, और पोर्टेबल एरिया

उत्तर

0

क्या आप सुनिश्चित करते हैं कि आपने अपने पोर्टेबल क्षेत्र में एंबेडेड संसाधन के रूप में अपना दृश्य चिह्नित किया है?

इसके अलावा मुझे पता चला कि पोर्टेबल क्षेत्रों की अच्छी सुविधा यह है कि आप एम्बेडेड दृश्यों को ओवरराइड कर सकते हैं, इसलिए यदि आप अलग-अलग कोड के साथ एम्बेडेड एक के नाम और स्थान के साथ अपने होस्ट ऐप में कोई दृश्य डालते हैं तो यह प्राथमिकता लेगा एम्बेडेड एक अच्छा !!!

आशा इस

+0

मुझे लगता है कि पंजीकृत दृश्य इंजन के आदेश पर निर्भर करता है, अगर एम्बेडेड व्यू इंजन पहले पोर्टेबल क्षेत्र के दृश्य रूट प्रोजेक्ट में नियमित दृश्यों को ओवरराइड कर देगा। एक साइड नोट के रूप में मैं कहूंगा कि आप कभी-कभी अपने सभी विचार इंजन साफ़ करके एक छोटा प्रदर्शन लाभ प्राप्त कर सकते हैं और यह सुनिश्चित कर सकते हैं कि आपने केवल अपनी परियोजना में उपयोग किए गए लोगों को पंजीकृत किया हो। Http://insightpassion.com/norbertraus/index.php/2011/04/29/razor-views-performance/ – JohannesH

12

मैं थोड़ी देर के लिए इस विशेष मुद्दे पर संघर्ष कर रहा है में मदद करता है, लेकिन मुझे लगता है कि मैं अंत में यह समझ से बाहर।

फ़ोल्डर संरचना और आपके प्रोजेक्ट के अंदर नामस्थानों को कैसे बुलाया जाता है, यह ठीक से काम करने के लिए बहुत महत्वपूर्ण है!

https://github.com/fretje/MembershipStarterKit

परियोजना की संरचना पर एक नज़र डालें:

मैं एम्बेडेड उस्तरा विचारों यहाँ के साथ एक पोर्टेबल क्षेत्र की एक काम उदाहरण है।

क्षेत्र का नाम UserAdministration है, और परियोजना के रूट में UserAdministrationRegistration कक्षा है, जो UserAdministration नामस्थान में रहता है। फिर Controllers, Models और Views फ़ोल्डर (बस एक सामान्य एमवीसी प्रोजेक्ट की तरह) और Views फ़ोल्डर के तहत, फिर से UserAdministration फ़ोल्डर है जिसमें क्षेत्र के दृश्य शामिल हैं।

कुछ और जो काम करने के लिए एम्बेडेड दृश्यों के लिए बहुत महत्वपूर्ण है: आपको में global.asax.cs फ़ाइल की विधि में एक नया व्यू इंजन पंजीकृत करना होगा, क्या आपने ऐसा किया था?

PortableAreaRegistration.RegisterEmbeddedViewEngine(); 

और ... अपना पंजीकरण कक्षा में, सुनिश्चित करें कि आप RegisterArea विधि है जो 2 मानकों (AreaRegistrationContext context और IApplicationBus bus) लेता है ओवरराइड बनाने के लिए, और वहाँ में आधार कार्यान्वयन फोन:

public override void RegisterArea(AreaRegistrationContext context, 
    IApplicationBus bus) 
{ 
    base.RegisterArea(context, bus); // <== very important! 

    context.MapRoute(
     "UserAdministration", 
     AreaName + "/{controller}/{action}/{id}", 
     new { controller = "UserAdministration", action = "Index", 
       id = UrlParameter.Optional } 
    ); 
} 

आप तो आधार कार्यान्वयन को कॉल न करें, आपको कम से कम

RegisterAreaEmbeddedResources(); 

यह सुनिश्चित करने के लिए कि आपके एम्बेडेड दृश्य और संसाधन पंजीकृत हैं

+0

इस उत्तर के लिए धन्यवाद, बिल्कुल वही जो मैं ढूंढ रहा था। मुझे अभी भी दृश्य मिल गया त्रुटि नहीं मिली। यह एम्बेडेड के रूप में सेट है लेकिन अभी भी कुछ भी नहीं है। – Pieter

+0

मुझे इसे काम करने के लिए अपनी वेबसाइट में एंबेडेड रिसोर्सवर्टुअलपाथप्रोवाइडर के लिए एक न्यूज पैकेज संदर्भ जोड़ना पड़ा। – Pieter

+0

यह मेरे जैसा था जैसा दिखता है। यह मेरी देव मशीन पर ठीक काम करता है, लेकिन वास्तव में इसे तैनात किए जाने पर लेखन दृश्य फ़ाइलों को नहीं देखता है। मैंने जिन दृश्यों को देखा, उन्हें लॉग इन किया, और यह पूरी तरह से .cshtml फ़ाइलों को छोड़ दिया, हालांकि इसे _layout और _viewstart के लिए मिला। –

1

मैं Fretje के जवाब में दिए गए निर्देशों का पालन करके इस काम कर मिल गया और उसके बाद भी अपनी वेबसाइट में EmbeddedResourceVirtualPathProviderकरने के लिए एक nuget पैकेज संदर्भ जोड़ें।

+0

बस संदर्भ? इसे हुक करने के लिए आपने क्या किया? –

+1

विजुअल स्टूडियो में, समाधान एक्सप्लोरर में संदर्भों पर राइट-क्लिक करें और "लाइब्रेरी पैकेज संदर्भ जोड़ें" का चयन करें। पॉपअप में "ऑनलाइन" चुनें और "एम्बेडेड रिसोर्सवर्टुअलपाथप्रोवाइडर" के लिए खोजें, फिर इंस्टॉल करें पर क्लिक करें। ध्यान दें कि आपको VS2010 की आवश्यकता है जिसे Nuget पैकेज इंस्टॉलर के लिए सर्विस पैक 1 में अपडेट किया गया था। – Pieter

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