2010-02-04 18 views
39

के साथ एएसपी.NET एमवीसी को संयोजित करें एमवीसी रूट एप्लिकेशन (मास्टरपेज और थीम के साथ पोर्टल) बनाना और कुछ वेबफॉर्म आधारित उपप्रोजेक्ट्स को जोड़ना संभव है (हमारे पास पहले से मौजूद एक मौजूदा वेबफॉर्म एप्लिकेशन है जिसे हम एकीकृत करना चाहते हैं पोर्टल)?वेबफॉर्म

आप नेविगेशन (साइटमैप, यूआरएल रूटिंग) को कैसे केंद्रीकृत करेंगे?
आप मास्टरपेज कैसे साझा करेंगे?
आप संसाधनों (~ मुद्दों आदि) का संदर्भ कैसे लेंगे?

समाधान एक described here की तरह कुछ हद तक पुरानी

उत्तर

40

MVC वेब फॉर्म के संयोजन पूरी तरह संभव है लग रहे हैं। एक परिचय के लिए this blog post by Scott Hanselman देखें।

+1

ग्रेट पोस्ट, वही काम करते समय मैंने उपयोग किए गए सभी लिंक। – Odd

5

महान जवाब ऊपर। दूसरी बात जो आप विचार कर सकते हैं वह एएसपी.नेट से एएसपी.नेट एमवीसी में माइग्रेट कर रही है, जिस स्थिति में this post might help you प्रोजेक्ट फाइल माइग्रेट कर रहा है।

16

संदर्भ के लिए मैंने कल इस कार्य को पूरा करने में कामयाब रहा - एक मौजूदा वेबफॉर्म वेबसाइट पर एमवीसी कार्यक्षमता जोड़ें, ऐसा है - सोचा कि अगर मैं किसी के लिए किसी भी प्रयोग के मामले में लिखूंगा तो मैं लिखूंगा।

लोग कहते हैं: "एमवीसी के रूप में अपने वेब फॉर्म एप्लिकेशन को फिर से लिखना सबसे अच्छा तरीका है" लेकिन इसके लिए अक्सर कोई व्यावसायिक मामला नहीं होता है जब एप्लिकेशन अच्छी तरह से स्थापित होता है और समय के साथ काफी राक्षस बनने के लिए बढ़ता है (जो अभी भी काम करता है अच्छा मैं जोड़ सकता हूँ)। मेरे मामले में, हमें इस आवेदन में एक नया कार्य लागू करने के लिए कहा गया था - और हाल ही में अन्य परियोजनाओं पर एमवीसी में विकास कर रहा है - मैं एमवीसी में यह नया कार्य बनाना चाहता था। यह मैं क्या किया है:

  1. एक नया ASP.NET MVC 4 आवेदन बनाएँ और खाली खाका (उस्तरा के साथ)

  2. एक बार भरी हुई, राइट-क्लिक किया संदर्भ चयनित> ब्राउज़ करें और फिर बिन मेरी मौजूदा वेबसाइट के फ़ोल्डर में नेविगेट किया गया। मैंने डीएलएल में जोड़ा जो मैं मौजूदा साइट में उपयोग कर रहा था। संदर्भ के लिए, मैं AjaxControlToolkit का उपयोग कर रहा हूं इसलिए NuGet से नवीनतम में जोड़ने का फैसला किया। इसके बाद वेब.कॉन्फिग फ़ाइल

  3. को फिर से अपडेट करना चाहिए, फिर मैंने विंडोज एक्सप्लोरर खोला और मेरी मौजूदा वेबसाइट के रूट फ़ोल्डर में नेविगेट किया। विजुअल स्टूडियो का उपयोग करके, मैंने शीर्ष-स्तरीय फ़ोल्डर संरचना को मौजूदा साइट (बिन फ़ोल्डर से घटाकर) दोहराया जिसके परिणामस्वरूप 2 साइटें समान शीर्ष-स्तरीय फ़ोल्डरों वाली हैं (लेकिन नई परियोजना जिसमें एमवीसी ऐप_स्टार्ट, नियंत्रक, मॉडल हैं और दृश्य फ़ोल्डर भी, लेकिन स्पष्ट रूप से बिन नहीं)।

  4. सेटअप, मैं Windows Explorer में इसी शीर्ष-स्तरीय फ़ोल्डर से उप-फ़ोल्डर और फ़ाइलों की नकल की और उन्हें समाधान में चिपकाया। यदि आप इसे करते हैं, तो प्रोजेक्ट आपको उप-फ़ोल्डरों और सामग्री में सीधे कॉपी करने की अनुमति देता है, दृश्य स्टूडियो के माध्यम से मौजूदा आइटम को केवल फाइलों में कॉपी करता है जिससे समय बचाता है।कृपया ध्यान दें: रूट फ़ोल्डर के लिए, मैं नहींweb.config या Global.asax में नकल किया था, लेकिन अन्य सभी फ़ाइलों में नकल (default.aspx की तरह, आदि)

  5. एक बार सभी सामग्री थी कॉपी किया गया, मैंने नई परियोजना में web.config खोल दिया और मौजूदा साइट में web.config खोल दिया। मैंने मौजूदा वेबसाइट (ऐपसेटिंग, कनेक्शनस्ट्रिंग्स, नेमस्पेस, सदस्यता जानकारी इत्यादि) के लिए विशिष्ट कुछ नया webconfconfig में कॉपी किया है। ग्लोबल.एक्सएक्स फाइलों पर भी यही लागू होता है।

  6. मैंने किसी भी चीज का निर्माण करने और तय करने का प्रयास किया जो मुझे याद आएगा।

  7. एक बार सब कुछ सही था (और मैंने मौत की कुछ पीले स्क्रीन को गोली मार दी थी) मैंने देखा कि डिफ़ॉल्ट.aspx लोड करते समय मुझे पृष्ठ त्रुटि नहीं मिली।

    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    
        // This informs MVC Routing Engine to send any requests for .aspx page to the WebForms engine 
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); 
        routes.IgnoreRoute("{resource}.aspx"); 
    
        // Important change here: removed 'controller = "Home"' from defaults. This is the key for loading 
        // root default page. With default setting removed '/' is NOT matched, so default.aspx will load instead 
        routes.MapRoute(
         name: "Default", 
         url: "{controller}/{action}/{id}", 
         defaults: new { action = "Index", id = UrlParameter.Optional } 
        ); 
    } 
    

के साथ इन सभी कदम उठाए: इस मार्ग के लिए नीचे है, यहाँ परिवर्तन मैं रूटिंग जानकारी (Global.ascx MVC 3, या App_Start में स्थित> RouteConfig.cs MVC 4) के लिए बनाया है , साइट लोड हो गई और हमेशा चल रही थी, लेकिन अब मेरे पास एएसपी.नेट वेबफॉर्म और एमवीसी हाइब्रिड है। मुझे यकीन है कि इस कार्य को पूरा करने के शायद आसान तरीके हैं, लेकिन मैंने अन्य तरीकों का प्रयास किया और असफल रहा। इस तरह से मुझे लगभग 20 मिनट लग गए और मैं उठ रहा था और चल रहा था ... अच्छी तरह से बैठे और कोडिंग :)

0

मैं इस स्थिति में बहुत फंस गया था, आखिरकार मुझे एक समाधान मिला जो काम करता था, सबसे पहले web.config में सभी कॉपी करें विचार फ़ोल्डर।

कि खुले Route.config(Routeconfig) फ़ाइल के बाद, वहाँ आप एक विधि RegisterRoutes मिलेगा, इसे उसी स्थिति रखने के लिए और किसी अन्य विधि RegisterRoutes2() नामित बनाते हैं, और MVC आवेदन से नीचे दी गई विधि कोड पेस्ट कॉपी:

public static void RegisterRoutes2(RouteCollection routes) 
{...} 

में कुछ मामलों में एमवीसी ऐप में विधि का नाम रजिस्टर रूट होगा। यदि उपरोक्त कोड काम नहीं करता है, तो इसे अपनी मशीन के एमवीसी एप्लिकेशन से पेस्ट करें। फिर, global.asax फ़ाइल पर जाएं, आपको RegisterRoutes() कहा जाएगा, सरल अब, RegisterRoutes2() पर भी कॉल करें। और आप कर चुके हैं, अपने आवेदन को पुनरारंभ करें, या साफ निर्माण, यह चला जाएगा।

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