2011-01-02 8 views
134

डिफ़ॉल्ट ASP.NET MVC 3 परियोजना, लेआउट & आंशिक cshtml फ़ाइलें एक अंडरस्कोरक्यों Razor _layout.cshtml फ़ाइल नाम में अग्रणी अंडरस्कोर है?

  • _viewstart
  • _Layout
  • _LogOnPartial

से प्रारंभ होते हैं क्या इस सम्मेलन मतलब है, और क्या के लिये उपयोग किया जाता है? क्या मुझे इस सम्मेलन का पालन करने की ज़रूरत है?

क्या ढांचा .cshtml फ़ाइल के लिए कुछ विशेष अर्थ देता है जो अंडरस्कोर से शुरू होता है?

+0

मैं रेजर के साथ NancyFX का उपयोग करें और डिफ़ॉल्ट रूप से, क्योंकि यह किसी भी सामग्री है कि सामग्री फ़ोल्डर में नहीं है की अनुमति नहीं देता में App_Code फ़ोल्डर की तरह। (इसे web.config या कस्टम कॉन्फ़िगरेशन में ओवरराइड किया जा सकता है) किसी भी फाइल को सीधे .cshtml जैसी सेवा करना असंभव है। तो मैं अपने दृश्य नामों में "_" का उपयोग नहीं करता क्योंकि यह आवश्यक और बदसूरत नहीं है। –

उत्तर

193

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

एएसपी.नेट टीम ने कहा है कि वेब पेज एएसपी.नेट विकास के भीतर एक प्रारंभिक बिंदु है, जिसके कारण समय में एमवीसी में माइग्रेशन होना चाहिए (उन लोगों के लिए जो आगे बढ़ना चाहते हैं)। इसका एक हिस्सा यह है कि वेब पेजों से एमवीसी में माइग्रेट करना जितना संभव हो सके उतना आसान होना चाहिए। नतीजतन, यह वेब पेजों के भीतर एमवीसी रेजर फ़ाइलों में स्थापित नामकरण सम्मेलनों को ले जाने के लिए समझ में आता है।

तो वहाँ एक अंडरस्कोर से फ़ाइल नाम लगाकर के लिए एक तकनीकी कारण है - यह सिर्फ MVC के लिए प्रासंगिक नहीं है।

+5

धन्यवाद। मेरे लिए यह सबसे अंतर्दृष्टिपूर्ण जवाब है। मुझे गलतफहमी थी कि रेजर एमवीसी से बंधे थे। अब मुझे लगता है कि अग्रणी अंडरस्कोर का कारण उन्हें एएसपी.नेट वेब पेजों के तहत सीधे सेवा देने से रोकना है। – richb

+1

एक नामकरण सम्मेलन जिसमें वास्तव में एक कार्यक्षमता बंधी हुई है, मैंने सोचा कि एमएस बेहतर होगा। और अब यह एमवीसी को ले जाया गया है, जिसे एक साफ स्लेट माना जाता था। –

+0

उम्मीद है कि वर्तमान .NET Framework 4.5.1 और विजुअल स्टूडियो 2013 रिलीज़ के बाद "वन एएसपी.नेट" कार्यक्षमता शामिल है, वे आखिरकार इन तकनीकी सीमाओं/हार्ड-कोडिंग से दूर हो सकते हैं। निश्चित रूप से मानक फ़ाइलों को साझा नहीं किया गया है, वर्तमान * .config, APP_Code और APP_Data निर्देशिकाओं के साथ आवश्यक है। लेकिन यह तर्क किसी कॉन्फ़िगरेशन फ़ाइल में कहीं भी होना चाहिए (डिफ़ॉल्ट रूप से मशीन कॉन्फ़िगरेशन) ताकि इसे ओवरराइड किया जा सके। इसके अलावा सामान्य पृष्ठों के इन डिफ़ॉल्ट नाम कॉन्फ़िगर करने योग्य (लेआउट/त्रुटि/आदि ...) होना चाहिए। –

7

पेज जो आपके ब्राउज़र (मास्टर पेज, आंशिक दृश्य आदि) से सीधे अनुरोधों से नहीं दिखाए जा सकते हैं, उनके नाम की शुरुआत में अंडरस्कोर (_) है।

तो यदि आप _Layout.cshtml (यह मास्टर पेज) के लिए अनुरोध करने का प्रयास करते हैं तो आपको सर्वर से एक त्रुटि मिल जाएगी।

यह उन फ़ाइलों को अलग करने का एक तरीका है जो रेजर व्यू इंजन में स्टैंड अकेले पृष्ठों के रूप में ब्राउज़ नहीं किए जा सकते हैं।

इस तरह से सोचें ... एमवीसी 2 में ... आप आंशिक दृश्य को अलग करेंगे और प्रत्यय के साथ मास्टर्ससाइट .master, .ascx, और सामान्य पृष्ठ हैं .aspx, दूसरी तरफ, रेजर में देखें ... सभी विचार .cshtml हैं, इसलिए आंशिक और मास्टरपेजों को अलग करने के लिए उनके पास उपसर्ग (_) होगा। यह अनिवार्य नहीं है, बस एक "सम्मेलन"।

+3

लेकिन उस तर्क से सभी सीएस और सीएसटीएमएल फाइलों को अंडरस्कोर के साथ उपसर्ग नहीं किया जाएगा? – richb

+0

यदि सभी फ़ाइलों में उपसर्ग के रूप में _ होगा तो आपकी साइट काम नहीं करेगी ... जिन फ़ाइलों को _prefix है, वे सामान्य पृष्ठ के अंदर प्रस्तुत किए जाते हैं ... (आंशिक के लिए), और साइटमैस्टर एक टेम्पलेट है ... इसलिए इसमें सामग्री होनी चाहिए प्रदर्शित किया जाना है। – Juztin

+0

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

2

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

13

इस प्रकार रेल पर रूबी करता है (आंशिक रूप से _ के साथ शुरू होता है लेकिन रेंडर आंशिक कॉल में _ शामिल नहीं होता है), और एएसपीनेट एमवीसी ने इससे भारी प्रेरणा ली है।

कोई तकनीकी कारण वास्तव में, अन्य डेवलपर्स (और स्वयं 6 महीने बाद) के इरादे को स्पष्ट रूप से दिखाने के लिए केवल एक सम्मेलन कहने के लिए: यह आंशिक दृश्य है।

+0

यह गलत नहीं है, जैसा कि ऊपर दिए गए उत्तर से इंगित किया गया है - अंडरस्कोर की सुरक्षा कार्यक्षमता है। – iJungleBoy

+1

@iJungleBoy स्वीकृत उत्तर देखें। एएसपीनेट एमवीसी (जो यह सवाल है) के लिए, कोई सुरक्षा कार्यक्षमता नहीं है। उन दृश्य फ़ोल्डर में web.config देखें जो पहले से ही सभी cshtml और aspx फ़ाइलों को अवरुद्ध करता है, अंडरस्कोर या नहीं (उनके लिए 'System.Web.HttpNotFoundHandler' सेट अप करता है)। –

1

मैं एमवीसी का उपयोग नहीं करता, लेकिन वेब पेजों के साथ जो रेजर सिंटैक्स का भी उपयोग करता है, _ उपसर्ग आम तौर पर संकेत देता है कि पृष्ठ किसी उपयोगकर्ता द्वारा उपयोग नहीं किया जाना है, लेकिन अन्य पृष्ठों या कुछ कोड द्वारा। यदि आप _prefix वाले पृष्ठ पर नेविगेट करने का प्रयास करते हैं, तो एएसपीनेट इसकी पहुंच को रोक देगा। यह क्यों लेआउट पृष्ठों और अन्य ऐसे पृष्ठों के साथ प्रयोग किया जाता है क्योंकि उन्हें किसी उपयोगकर्ता द्वारा सीधे एक्सेस नहीं किया जाना चाहिए।

asp.net

+0

@ माइकब्रिंड आप एक डिफ़ॉल्ट एएसपी.नेट एमवीसी प्रोजेक्ट में '/ view' के तहत सीधे * किसी भी * दृश्यों को ब्राउज़/ब्राउज़ नहीं कर सकते हैं; इसे रोकने के लिए '/ views/web.config' फ़ाइल सेट अप की गई है। लेकिन नियंत्रक कार्रवाई को 'व्यू ("_ इंडेक्स", मॉडल) लौटने से रोकने के लिए * कुछ नहीं * है;' यह ठीक काम करता है; मैंने इसे _Index.cshtml पर दृश्य का नाम बदलकर और ऊपर की तरह कॉल करने के लिए कार्रवाई को बदलकर किया है। –

+0

@ माइकब्रिंड यह प्रश्न एमवीसी के बारे में है, वेब पेज नहीं। दी; मैंने अपनी मूल टिप्पणी में यह निर्दिष्ट नहीं किया था। –

+0

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

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