2008-11-10 11 views
11

मैं ASP.NET MVC के साथ चारों ओर खेल रहा है और एक सवाल था। या शायद यह एक चिंता है कि मैं यह गलत कर रहा हूँ। बस मेरे पंखों को थोड़ा सा खींचने के लिए एक लंगड़ा स्थल पर काम करना। मुझे खेद है कि यह प्रश्न बिल्कुल संक्षिप्त नहीं है।ASP.Net MVC और RenderPartial डब्ल्यू/संबंधित पथ

ठीक है, यहां परिदृश्य है। जब उपयोगकर्ता घर/सूचकांक पर जाता है, तो पृष्ठ को उत्पादों की एक सूची और लेखों की एक सूची दिखानी चाहिए। फ़ाइल लेआउट इस तरह है (दाल मेरे डेटा का उपयोग परत है):

 
Controllers 
    Home 
     Index  

Views 
    Home 
     Index  inherits from ViewPage 
    Product   
     List  inherits from ViewUserControl<IEnumerable<DAL.Product>> 
     Single  inherits from ViewUserControl<DAL.Product> 
    Article 
     List  inherits from ViewUserControl<IEnumerable<DAL.Article>> 
     Single  inherits from ViewUserControl<DAL.Article> 
Controllers.HomeController.Index produces a View whose ViewData contains two entries, a IEnumerable<DAL.Product> and a IEnumerable<DAL.Article>. 

View.Home.Index will use those view entries to call: 
Html.RenderPartial("~/Views/Product/List.ascx", ViewData["ProductList"]) 
and Html.RenderPartial("~/Views/Article/List.ascx", ViewData["ArticleList"]) 

View.Product.List will call 
foreach(Product product in View.Model) 
    Html.RenderPartial("Single", product); 

View.Article.List does something similar to View.Product.List 

यह दृष्टिकोण हालांकि विफल रहता है। दृष्टिकोण मुझे समझ में आता है, लेकिन शायद इन एमवीसी प्लेटफ़ॉर्म के साथ अधिक अनुभव वाला कोई व्यक्ति बेहतर तरीके से पहचान लेगा।

ऊपर View.Product.List अंदर एक त्रुटि पैदा करता है। Html.RenderPartial("Single",...) पर कॉल शिकायत करता है कि "एकल" दृश्य नहीं मिला था। त्रुटि इंगित करता है:

 
The partial view 'Single' could not be found. The following locations were searched: 
~/Views/Home/Single.aspx 
~/Views/Home/Single.ascx 
~/Views/Shared/Single.aspx 
~/Views/Shared/Single.ascx 

क्योंकि मैं RenderAction() उत्पाद में एक दृश्य से फोन कर रहा था, मैं क्रम दृश्य के भीतर "एकल" दृश्य \ उत्पाद देखने के लिए उम्मीद है। ऐसा लगता है कि लुकअप नियंत्रक के सापेक्ष है जिसने वर्तमान दृश्य के बजाय मूल दृश्य (/ नियंत्रक/गृह आमंत्रित/दृश्य/उत्पाद) का आह्वान किया है।

View.Product.List will call 
foreach(Product product in View.Model) 
    Html.RenderPartial("~/Views/Product/Single.ascx", product);
बजाय

View.Product.List will call 
foreach(Product product in View.Model) 
    Html.RenderPartial("Single", product); 

इस सुधार में काम करता है लेकिन .. मुझे समझ नहीं आता क्यों मैं करने के लिए आवश्यक:

तो मैं बदलते दृश्य \ उत्पाद इसका समाधान करने में, ऐसी है कि कर रहा हूँ दृश्य का पूरा पथ निर्दिष्ट करें। यह मूल नियंत्रक के दृष्टिकोण पथ के बजाय वर्तमान दृश्य के पथ के सापेक्ष सापेक्ष नाम के व्याख्या के लिए मुझे समझ में आएगा। मैं किसी भी उपयोगी मामले के बारे में नहीं सोच सकता जहां वर्तमान दृश्य की बजाय नियंत्रक के दृष्टिकोण से संबंधित नाम का अर्थ उपयोगी है (सामान्य मामले को छोड़कर जहां वे समान हैं)।

इस समय मेरे पास एक प्रश्न चिह्न होना चाहिए? जोर देने के लिए यह वास्तव में एक सवाल है।

+0

बस इस भर में ठोकर खाई संबंधित वस्तु की तलाश में (मुझे पता है इसके 6 महीने से अधिक पुराना)। लेकिन आप रेंडरएक्शन() का उपयोग करके उल्लेख करते हैं, हालांकि आपके सभी उदाहरण रेंडरपार्टियल() का उपयोग करते हैं, क्या यह एक टाइपो है? मुझे लगता है कि रेंडरएक्शन (रेंडरपार्टियल के विपरीत) इस स्थिति में काम करना चाहिए? –

उत्तर

4

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

  • होम नियंत्रक केवल एक ही कभी संदर्भ उत्पाद/लेख सूची उपयोगकर्ता नियंत्रण
  • उपयोगकर्ता नियंत्रण साझा कर रहे हैं:

    मैं सोच रहा था, आप 2 मामलों है कई नियंत्रकों द्वारा

पहले मामले में, दृश्य उपयोगकर्ता नियंत्रण वास्तव में घर नियंत्रक से संबंधित हैं और उन्हें घर contr में रखने के लिए समझ में आता है ओलर फ़ोल्डर। दूसरे मामले में, उन्हें साझा फ़ोल्डर में रखने का अर्थ होता है क्योंकि उन्हें नियंत्रकों द्वारा साझा किया जाएगा।

किसी भी मामले में, शायद आप उन्हें एक उप फ़ोल्डर में रख सकते हैं। दृश्य/होम/उत्पादों की तरह और फिर रेंडरपार्टियल ("उत्पाद/एकल") आज़माएं और देखें कि क्या होता है? मुझे नहीं पता कि यह इसे हल करने का प्रयास करेगा: होम/उत्पाद/एकल और फिर साझा/उत्पाद/एकल या नहीं। यदि उप फ़ोल्डर्स काम करते हैं, तो ऐसा लगता है कि वे उत्पाद और आलेख के तार्किक पृथक्करण की अनुमति देते हैं, जबकि यह दिखाते हुए कि वे अभी भी होम नियंत्रक के सदस्य हैं या सभी नियंत्रकों द्वारा साझा किए गए हैं।

]

चेक बाहर स्टीव सैंडरसन द्वारा इस ब्लॉग प्रविष्टि:

http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/

तुम क्या कर रहे गलत नहीं है, लेकिन यह एक तरह से/देखें के सम्मेलन के खिलाफ जाने के लिए प्रतीत होता है नियंत्रक फ़ोल्डर के नाम। उस ने कहा, यह समझ में आता है कि नियंत्रक-अज्ञेयवादी उपयोगकर्ता नियंत्रण को परिभाषित करना और उन्हें घोंसला देना वैध लगता है। तो मुझे पता नहीं!

वैसे भी, लिंक केवल उपयोग नियंत्रण प्रदान करने के लिए रेंडरपार्टियल का उपयोग करने की बजाय एक विधि का वर्णन करता है, यह रेंडरपार्टियल रिक्वेस्ट की एक विधि को परिभाषित करता है जो नियंत्रक कार्रवाई के रिटर्न वैल्यू (आपके मामले में उपयोगकर्ता नियंत्रण में) प्रस्तुत करता है। तो आप एक एक्शन लिस्ट के साथ एक उत्पाद और लेख नियंत्रक जोड़ सकते हैं जो आपके उपयोगकर्ता नियंत्रण को वापस लाता है, और फिर उन दो कार्यों को होम/इंडेक्स व्यू से कॉल करें। यह मेरे लिए अधिक सहज लगता है, लेकिन सिर्फ एक राय है।

वह एमवीसी कंट्रीब से उप-नियंत्रकों का भी उल्लेख करता है, और मुझे पूरा यकीन है कि इस तरह की कुछ एएसपी.नेट एमवीसी रिलीज का हिस्सा बनने की इच्छा है।

+0

रेंडरपार्टियल ("उत्पाद/एकल") उत्पाद दृश्य फ़ोल्डर में एक उप फ़ोल्डर के लिए काम करेगा। मैंने इस तकनीक का उपयोग कुछ आंशिक विचारों के लिए किया है जो मैं नियंत्रक से जुड़े एएसपीएक्स/एएससीएक्स के बाकी हिस्सों से एक उप फ़ोल्डर में रखना चाहता हूं। – RichardOD

5

क्योंकि मैं RenderAction बुला रहा था() उत्पाद

में एक दृश्य से ...

मुझे समझ नहीं आता क्यों मुझे देखने का पूरा पथ निर्दिष्ट करने के लिए की जरूरत है। यह मेरे लिए कोई मतलब होता रिश्तेदार नाम वर्तमान दृश्य के पथ के बजाय मूल नियंत्रक के दृश्य पथ

हिस्सा मुझे लगता है कि आप गलत समझ रहे हैं "निष्पादन स्थान है व्याख्या की जा करने के लिए के लिए रिश्तेदार "बेहतर या आधिकारिक अवधि की कमी के लिए। पथ आपके दृश्य के सापेक्ष नहीं हैं, यहां तक ​​कि आपके "नियंत्रक का दृश्य" भी नहीं है जैसा आपने इसे रखा है। वे आपके अनुरोध यूआरएल के सापेक्ष हैं, जो नियंत्रक संदर्भ को परिभाषित करता है। मैं इसे बहुत अच्छी तरह से नहीं कह रहा हूं, लेकिन अगर आपने परावर्तक में थोड़ा समय बिताया है कि यूआरएल और मार्गों का समाधान कैसे किया जाता है, तो मुझे लगता है कि यह सब आपके सिर में हो जाएगा।

+0

आपने जो कहा वह समझ में आता है। –

+0

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

2

MVCStoreFront नमूना को देख से यह कैसे वे सब कुछ RenderPartial

फोन करने के लिए संरचित
Views 
    Shared 
     ProductSingle 
     ProductList 
     ArticleSingle 
     ArticleList 

फिर उन्हें के माध्यम से प्रस्तुत करना है:

<% Html.RenderPartial("ProductSingle", ViewData["ProductList"]); %> 
<% Html.RenderPartial("ProductList", product); %> 
<% Html.RenderPartial("ArticleSingle", article); %> 
<% Html.RenderPartial("ArticleList", ViewData["ArticleList"]); %>