কেন রেজার _layout.cshtml ফাইলের নামে একটি শীর্ষস্থানীয় আন্ডারস্কোর রয়েছে?


144

ডিফল্ট এএসপি.নেট এমভিসি 3 প্রকল্পে লেআউট এবং আংশিক সিএসটিএমএল ফাইলগুলি আন্ডারস্কোর দিয়ে শুরু হয়

  • _viewstart
  • _Layout
  • _LogOnPartial

কেন এই সম্মেলন, এবং এটি কী জন্য ব্যবহৃত হয়? আমার কি এই সম্মেলনটি অনুসরণ করা দরকার?

.cshtmlআন্ডারস্কোর দিয়ে শুরু হওয়া কোনও ফাইলটির কাঠামোর কোনও বিশেষ অর্থ দেয়?


আমি রেজারের সাথে ন্যান্সিএফএক্স ব্যবহার করি এবং পূর্বনির্ধারিতভাবে এটি যে কোনও বিষয়বস্তু ফোল্ডারে নেই যা সীমাবদ্ধ করে। (এটি ওয়েব.কমফিগ বা কাস্টম কনফিগারেশনে ওভাররাইড করা যেতে পারে) সরাসরি কোনও .cshtML এর মতো কোনও ফাইল পরিবেশন করা অসম্ভব। সুতরাং আমি আমার ভিউয়ের নামগুলিতে "_" চাপ দেওয়া ব্যবহার করি না কারণ এটি প্রয়োজনীয় এবং কুশ্রী নয়।
নরবার্ট নবার্টসন

উত্তর:


205

রেজারটি এএসপি.নেট ওয়েব পৃষ্ঠাগুলির (ওয়েবম্যাট্রিক্স) জন্য তৈরি করা হয়েছিল, যার ভিউ ফোল্ডার এবং রাউটিংয়ের ক্ষেত্রে আপনার এমভিসির মধ্যে যে সুরক্ষা তৈরি করা হয়েছে তেমন সুরক্ষা নেই। যেহেতু ওয়েব পৃষ্ঠাগুলিতে বিন্যাস পৃষ্ঠাগুলি সরাসরি পরিবেশন করার উদ্দেশ্যে নয়, সেগুলি আন্ডারস্কোর দিয়ে উপসর্গযুক্ত করা হয়েছে। এবং ওয়েব পৃষ্ঠাগুলি ফ্রেমওয়ার্কটি তাদের নামে শীর্ষস্থানীয় আন্ডারস্কোরযুক্ত ফাইলগুলিকে সরাসরি অনুরোধ না করার জন্য কনফিগার করা হয়েছে। ওয়েব পৃষ্ঠাগুলির মধ্যে থাকা অন্যান্য .cshtml ফাইলগুলিকে সাধারণত ব্রাউজ করার দরকার হয়। এগুলি .asp বা .pp ফাইলগুলির সমতুল্য।

এএসপি.এনইটি টিম জানিয়েছে যে ওয়েব পেজগুলি এএসপি.এনইটি বিকাশের মধ্যে একটি সূচনা পয়েন্ট, যা সময়মতো এমভিসি-তে স্থানান্তরিত হওয়া উচিত (যারা এগিয়ে যেতে চান তাদের জন্য)। এর একটি অংশের অর্থ হল যে ওয়েব পৃষ্ঠাগুলি থেকে এমভিসিতে স্থানান্তর করা যতটা সম্ভব সহজ হওয়া উচিত। ফলস্বরূপ, ওয়েব পৃষ্ঠাগুলির মধ্যে প্রতিষ্ঠিত নামকরণ কনভেনশনগুলি এমভিসি রেজার ফাইলগুলিতে বহন করা বোধগম্য।

তাই সেখানে হয় একটি আন্ডারস্কোর সঙ্গে ফাইলের নাম prefixing জন্য একটি প্রযুক্তিগত কারণে - এটা শুধু MVC প্রাসঙ্গিক নয়।

[আপডেট অক্টোবর 2018]

নতুন এএসপি.নেট কোর রেজার পেজ ফ্রেমওয়ার্কে (সংস্করণ ২.১ ব্যতীত) অগ্রণী আন্ডারস্কোরযুক্ত ফাইলগুলি যখন @pageসূচনাকালে রুটগুলি তৈরি করা হয় তখন তা অগ্রাহ্য করা হয় - এমনকি যদি তাদের কোনও নির্দেশ থাকে (যা সাধারণত তাদের রুটযোগ্য রেজার পৃষ্ঠা হিসাবে তৈরি করে) । এই কারণেই এটি একটি রেজার পৃষ্ঠাগুলির অ্যাপ্লিকেশনটিতে শীর্ষস্থানীয় আন্ডারস্কোর সহ লেআউট এবং আংশিক ফাইলগুলির নামকরণে বোধগম্য হয় যদি সেগুলি ব্রাউজ করার উদ্দেশ্যে না হয়।


6
ধন্যবাদ। আমার জন্য এটি সবচেয়ে অন্তর্দৃষ্টিযুক্ত উত্তর ful রেজারকে এমভিসির সাথে বেঁধে দেওয়া হয়েছিল আমি সেই অপব্যবহারের মধ্যে ছিলাম। এখন আমি দেখছি শীর্ষস্থানীয় আন্ডারস্কোরের কারণ হ'ল এএসপি.নেট ওয়েব পৃষ্ঠাগুলির অধীনে তাদের সরাসরি পরিবেশন করা থেকে বিরত রাখা।
সমৃদ্ধ

1
একটি নামকরণের কনভেনশনে যা কার্যত একটি কার্যক্ষমতাকে আবদ্ধ করে রেখেছিল, আমি ভেবেছিলাম এমএস আরও ভাল জানবে। এবং এখন এটি এমভিসি-তে পৌঁছেছে, যা একটি পরিষ্কার স্লেট বলে মনে করা হয়েছিল।
বরিস বি।

আশাকরি বর্তমান। নেট ফ্রেমওয়ার্ক ৪.৫.১ এবং "ওয়ান এএসপি.এনইটি" কার্যকারিতা সহ ভিজ্যুয়াল স্টুডিও 2013 রিলিজের পরে তারা এই প্রযুক্তিগত সীমাবদ্ধতাগুলি / হার্ড-কোডিং থেকে অবশেষে সরে যেতে পারবে can অবশ্যই স্ট্যান্ডার্ড ফাইলগুলি ভাগ না করা বর্তমান * .কনফিগ, অ্যাপ্লিকেশন_কোড এবং অ্যাপ্লিকেশন_ডাটা ডিরেক্টরি হিসাবে প্রয়োজনীয়। তবে এই যুক্তিটি কোথাও একটি কনফিগার ফাইলে বসে থাকতে হবে (মেশিন কনফিগার ডিফল্ট হিসাবে) যাতে এটি ওভাররাইড করা যায়। এছাড়াও সাধারণ পৃষ্ঠাগুলির এই ডিফল্ট নামগুলি কনফিগারযোগ্য (লেআউট / ত্রুটি / ইত্যাদি ...) হওয়া উচিত।
টনি ওয়াল

1
@ ড্যানিয়েল ওহ, আমি আপনাকে বোঝাতে চাইছি আমি উত্তরটি সম্পাদনা করেছি কারণ এটি বিজ্ঞাপন হিসাবে কাজ করে না।
মাইক ব্রিন্ড

1
@ ড্যানিয়েল আপনি যা দেখছেন তা স্পষ্টতই একটি বাগ যা রেজার পৃষ্ঠাগুলি ২.১ এ প্রকাশিত হয়েছে। এটি ২.২-এ স্থির হওয়ার কথা রয়েছে। আমি 2.0 তে বর্ণিত হিসাবে এটি কাজ করে।
মাইক ব্রিন্ড

12

রেল অন রেল এটি করে (পার্টিয়ালগুলি একটি _ দিয়ে শুরু হয় তবে রেন্ডার আংশিক কলটিতে _ অন্তর্ভুক্ত নয়), এবং এএসপিএনটি এমভিসি এটি থেকে ভারী অনুপ্রেরণা তৈরি করেছে।

প্রকৃতপক্ষে কোনও প্রযুক্তিগত কারণ নেই, কেবল অন্য একটি বিকাশকারীকে (এবং 6 মাস পরে নিজেকে) এই উদ্দেশ্যটি স্পষ্টভাবে দেখানোর জন্য একটি সম্মেলন: এটি একটি আংশিক দৃষ্টিভঙ্গি।


এটি ভুল, উপরের উত্তরের দ্বারা নির্দেশিত হিসাবে - আন্ডারস্কোরটিতে একটি সুরক্ষা কার্যকারিতা রয়েছে।
iJungleBoy

1
@iJungleBoy গৃহীত উত্তর দেখুন। ASP.net এমভিসির জন্য (যা এই প্রশ্নটি নিয়ে রয়েছে), কোনও সুরক্ষা কার্যকারিতা নেই। ভিউস ফোল্ডারে ওয়েবকনফিগটি দেখুন যা ইতিমধ্যে সমস্ত সিএসটিএমএল এবং এসপিএক্স ফাইলগুলি আন্ডারস্কোর করে বা না করে ( System.Web.HttpNotFoundHandlerতাদের জন্য সেট আপ করে) blocks
মাইকেল Stum

7

আপনার ব্রাউজার থেকে সরাসরি অনুরোধগুলি (মাস্টার পৃষ্ঠাগুলি, আংশিক দর্শন ইত্যাদি) দ্বারা প্রদর্শিত পৃষ্ঠাগুলির নামের শুরুতে আন্ডারস্কোর (_) থাকে।

সুতরাং আপনি _Layout.cshtml (এটি মাস্টার পৃষ্ঠা) এ অনুরোধ করার চেষ্টা করলে আপনি সার্ভার থেকে একটি ত্রুটি পাবেন।

রেজার ভিউ ইঞ্জিনে ফাইলগুলিকে আলাদা করার একটি উপায় যা একা পৃষ্ঠাগুলি হিসাবে ব্রাউজ করা যায় না।

এমভিসি 2 তে এটিকে ভাবুন ... আপনি আংশিক দৃষ্টিভঙ্গি এবং মাস্টারসাইটটিকে সুফিক্সের সাথে আলাদা করতে পারবেন। অন্যদিকে, রেজার ভিউতে মাস্টার, .অ্যাসেক্স এবং সাধারণ পৃষ্ঠাগুলি। এসপিএক্স ... সমস্ত দর্শন .cshtml হয়, সুতরাং আংশিক এবং মাস্টারপেজগুলি পৃথক করার জন্য তাদের একটি উপসর্গ (_) থাকবে। এটি বাধ্যতামূলক কিছুই নয়, কেবল একটি "সম্মেলন"।


4
কিন্তু সেই যুক্তি দিয়ে কি সমস্ত সিএস এবং সিএসটিএমএল ফাইলগুলি আন্ডারস্কোরের সাথে উপস্থাপিত হবে না?
সমৃদ্ধ

যদি সমস্ত ফাইলের _ একটি উপসর্গ হিসাবে থাকে তবে আপনার সাইটটি কাজ করবে না ... _প্রিফিক্সযুক্ত ফাইলগুলি একটি সাধারণ পৃষ্ঠার অভ্যন্তরে রেন্ডার করা হয় ... (পার্টিশালগুলির জন্য), এবং সাইটমাস্টার একটি টেম্পলেট ... সুতরাং এতে অবশ্যই বিষয়বস্তু থাকতে হবে প্রদর্শিত হবে।
জুলটিন

সুতরাং আমি এটি চেষ্টা করেছি এবং আমার বাক্সে আইআইএস ভিউ, ডিরেক্টরি থেকে কোনও ফাইল সরবরাহ করে না। স্থির .html ফাইলগুলিও নয়। সুতরাং আমি সত্যিই মনে করি না যে এটির উত্তর।
সমৃদ্ধ

জুটিন: প্রশ্ন হল তারা কেন আন্ডারস্কোর দিয়ে শুরু করবেন? যদি আমি _Layout.cshtm নামটি Layout.cshtml এ রাখি তবে এটি ঠিক ঠিক কাজ করে। তাহলে এই সম্মেলনের কারণ কী?
সমৃদ্ধ

2
প্রশ্নটি এসপ নেটওয়্যার এমভিসি সম্পর্কিত, ওয়েবপৃষ্ঠাগুলি নয়
ফেবস্প্রো

2

আমি যতদূর জানি এটি কেবল ফাইলটির উদ্দেশ্য চিহ্নিত করার জন্য ব্যবহৃত একটি সম্মেলন; আমি বিশ্বাস করি না এটি আসলে ফাইলটির আচরণ পরিবর্তন করবে। বেশিরভাগ বিকাশের প্রসঙ্গে, একটি আন্ডারস্কোর প্রিপেন্ডিং কোনও শ্রেণীর দ্বারা বা এই ক্ষেত্রে, অন্য কোনও টেম্পলেট, "ব্যক্তিগত" ব্যবহারের জন্য বোঝানো কিছু চিহ্নিত করে।


1

আমি এমভিসি ব্যবহার করি না, তবে ওয়েব পৃষ্ঠাগুলিতেও রেজার সিনট্যাক্স ব্যবহার করে, _ উপসর্গটি সাধারণত siginifies করে যে পৃষ্ঠাটি কোনও ব্যবহারকারী দ্বারা অ্যাক্সেস করার জন্য নয় অন্য পৃষ্ঠাগুলি বা কোনও কোড দ্বারা। আপনি যদি এমন কোনও পৃষ্ঠায় নেভিগেট করার চেষ্টা করেন যা _প্রিফিক্স ধারণ করে, তবে asp.net এতে অ্যাক্সেস আটকাতে পারে। এটি ব্যবহারকারীর দ্বারা সরাসরি অ্যাক্সেস করা উচিত নয় বলে লেআউট পৃষ্ঠাগুলি এবং এই জাতীয় পৃষ্ঠাগুলির সাথে এটি কেন ব্যবহৃত হয় ts

এ্যাসপনেটে অ্যাপ_ কোড ফোল্ডারের মতো কিছু


@ মাইক্রব্রাইন্ড আপনি কোনও/view ডিফল্ট এএসপি.নেট এমভিসি প্রকল্পের আওতায় সরাসরি কোনও ভিউ ব্রাউজ করতে / নেভিগেট করতে পারবেন না ; এটি /views/web.configপ্রতিরোধের জন্য ফাইলটি সেট আপ করা হয়েছে। তবে নিয়ামক পদক্ষেপটি ফেরাতে বাধা দেওয়ার কিছুই নেইView("_Index", model); এটি ঠিক কাজ করে; আমি কেবলমাত্র একটি ভিউর নাম _Index.cshtml এ পরিবর্তন করে এবং ক্রিয়াটি কল করার জন্য উপরে যেমন করেছিলাম তা পরিবর্তন করে করেছি।
অ্যান্ড্রু বারবার

@ মাইকবারিন্ড এই প্রশ্নটি এমভিসি সম্পর্কিত, ওয়েব পৃষ্ঠাগুলি সম্পর্কে নয়। মঞ্জুর; আমি আমার মূল মন্তব্যে এটি নির্দিষ্ট করেছিলাম না।
অ্যান্ড্রু বারবার

@ মাইকবারিন্ড আমি ছিলাম - এবং আমি - এই উত্তরটির প্রতিক্রিয়া জানাচ্ছি । তোমার না. আমার প্রাথমিক মন্তব্যটি বিভ্রান্তিমূলক ছিল (যদিও আমি "পার্টিয়ালগুলি" উল্লেখ করেছি), তাই আমি এটি মুছে ফেলেছি। আমার বক্তব্যটি ছিল এবং তা হ'ল এমভিসিতে একটি ভিউ লোড করতে সক্ষম না হওয়ায় আন্ডারস্কোরগুলির কোনও সম্পর্ক নেই । এই ব্যবহারকারী এমনকি "আমি এমভিসি ব্যবহার করি না" বলতে শুরু করেছিলেন, তবুও এই প্রশ্নটি ছিল এমভিসি সম্পর্কে। আমি কেবল নিশ্চিত হয়েছি যে এই উত্তরটি পড়ার পরে কেউ আসছেন এমনভাবে কোনওভাবে মনে হয় না যে এমভিসিতে একটি আন্ডারস্কোর একটি ভিউ লোড করার জন্য একটি নিয়ামক পদক্ষেপের ক্ষমতাকে প্রভাবিত করে। কোন ব্যাপারই না. আমরা সম্মত হই যে আমি কীভাবে কথা বললাম তাতে আমি নিরব ছিলাম। সম্পন্ন.
অ্যান্ড্রু বারবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.