निर्देशिका नामकरण और फ़ाइल नामकरण महत्वपूर्ण हैं, क्योंकि एएसपी.नेट एमवीसी ढांचा उनके बारे में कुछ मान्यताओं को बनाता है। यदि आप इन धारणाओं के अनुरूप नहीं हैं, तो आपको फ्रेमवर्क को यह जानने के लिए कोड लिखना होगा कि आप क्या कर रहे हैं। आम तौर पर बोलते हुए, आपको इन मान्यताओं के अनुरूप होना चाहिए जबतक कि आपके पास कोई अच्छा कारण न हो। सरल संभव नियंत्रक कार्रवाई में
आइए नज़र:
public ActionResult NotAuthorized()
{
return View();
}
कोई दृश्य का नाम) कॉल में निर्दिष्ट किया गया है क्योंकि दृश्य (, ढांचा अनुमान होगा कि दृश्य फ़ाइल नाम कार्रवाई के रूप में ही किया जाएगा नाम। ढांचे में एक प्रकार है जिसे व्यूइंजिन कहा जाता है जो विस्तार की आपूर्ति करेगा। डिफ़ॉल्ट व्यूइंजिन WebFormViewEngine है, जो उस नाम को ले जाएगा और इसमें एक .aspx संलग्न करेगा। तो इस मामले में पूरा फ़ाइल नाम NotAuthorized.aspx नहीं होगा।
लेकिन फ़ाइल में कौन सा फ़ोल्डर मिलेगा? फिर, ViewEngine उस जानकारी की आपूर्ति करता है। WebFormViewEngine के साथ, यह दो फ़ोल्डर में दिखेगा: ~/दृश्य/साझा और ~/दृश्य/{नियंत्रक}
इसलिए यदि आपके नियंत्रक AccountController बुलाया गया था, उस में लगेगा ~/दृश्य/खाता
लेकिन वहाँ कई बार हो सकता है जब आप इन नियमों का पालन नहीं करना चाहते हैं। उदाहरण के लिए, दो अलग-अलग क्रियाएं एक ही दृश्य (एक अलग मॉडल या कुछ के साथ) लौट सकती हैं। इस मामले में, आप अपनी कार्रवाई में स्पष्ट रूप से देखने के लिए नाम निर्दिष्ट करता है, तो:
public ActionResult NotAuthorized()
{
return View("Foo");
}
ध्यान दें कि WebFormViewEngine के साथ, "दृश्य का नाम" आम तौर पर फ़ाइल नाम, कम विस्तार के रूप में ही है, लेकिन ढांचे की आवश्यकता नहीं है अन्य दृश्य इंजनों की।
इसी तरह, आपके पास अपने एप्लिकेशन को विचारों और गैर-डिफ़ॉल्ट फ़ोल्डरों को देखने का कारण भी हो सकता है। आप अपना खुद का व्यूइंजिन बनाकर ऐसा कर सकते हैं। मैं this blog post में तकनीक दिखाता हूं, लेकिन प्रकार के नाम अलग हैं, क्योंकि यह ढांचे के पहले संस्करण के लिए लिखा गया था। हालांकि, बुनियादी विचार अभी भी वही है।
क्या व्यू के फ़ोल्डरों में उपफोल्डर हैं? यदि हां, तो नियंत्रक उन्हें कैसे पहुंचाता है? उदाहरण के लिए ... व्यवस्थापक/प्रोफ़ाइल/संपादित करें/1 –
ऐसा करने के लिए आपको अपना खुद का व्यूइंजिन लिखना होगा। WebFormViewEngine उन्हें नहीं मिलेगा। –
@ वेब सेट व्यू इंजन इंस्टेंस पर 'एक्टिकेशन' व्यूलाक्शनफॉर्मैट्स 'सेट करना सबफ़ोल्डर में दृश्य डालने में सक्षम है। – bzlm