সমস্ত অঞ্চলকে একই লেআউট ব্যবহার করতে বাধ্য করুন


88

আমার নীচের প্রকল্পের কাঠামো রয়েছে:

  • / দর্শন / ভাগ / _ লেআউট;

  • / অঞ্চল / অঞ্চল 1 / ভিউ / কন্ট্রোলারনাম / সূচক;

...

  • / অঞ্চল / অঞ্চল / ভিউ / কন্ট্রোলারনাম / সূচক।

লেআউটটিকে বেস লেআউট হিসাবে ব্যবহার করতে সমস্ত অঞ্চলকে বাধ্য করার কোনও উপায় আছে কি ?

_ভিউস্টার্ট ফাইলটি যুক্ত না করে এটি করার কোনও উপায় আছে (উদাহরণস্বরূপ, রাউটিং কনফিগারেশনের মাধ্যমে)?

আরো দেখুন:

আমি কীভাবে এএসপি.নেট এমভিসি 3 রেজার ভিউস্টার্ট ফাইলটিতে বিভিন্ন লেআউটগুলি নির্দিষ্ট করব?


উত্তর:


157

আপনাকে কেবল একটি ফাইল যুক্ত করতে হবে:

_ViewStart.cshtml

প্রতিটি অঞ্চল ফোল্ডারের অধীনে:

/Areas/Area1/Views/_ViewStart.cshtml

এবং এর মতো মূল বিন্যাসে নির্দেশ করতে ফাইলটি সম্পাদনা করুন:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

এটি কাজ করার জন্য, আপনাকে ভিউ'র বিন্যাসের সম্পত্তিটিতে কোনও মান নির্দিষ্ট করতে হবে না, যদি আপনি এটি করেন তবে আপনি বিশ্বব্যাপী বিন্যাসকে ওভাররাইড করে যাবেন

দ্রষ্টব্য: যেমন টনি উল্লেখ করেছেন, আপনি প্রতিটি বিন্যাসের বৈশিষ্ট্যটি মূল বিন্যাসে নির্দেশ করতে সম্পাদনা করতে পারবেন , তবে এটি করার এটি প্রস্তাবিত উপায় নয় যেহেতু আপনি নিজের বিন্যাসের সাথে আপনার দৃষ্টিভঙ্গিগুলিকে মিলিত করছেন এবং এটির পরিবর্তন হবে

সম্পাদনা করুন 1

আপনি যদি ডিফল্ট ভিউয়ের লেআউট সেট করতে কোড ব্যবহার করতে চান তবে সম্ভবত আপনার কোনও কাস্টম ভিউ ইঞ্জিন লেখার বিষয়টি বিবেচনা করা উচিত।

কাস্টম RazorViewEngineএবং সম্পর্কে গুগল চেষ্টা করুনRazorView

এই নিবন্ধটি একটি ভাল সূচনা পয়েন্ট হতে পারে

http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx

আমি এর মতো কিছু করি নি তবে আমি আশা করি আমি আপনাকে সঠিক দিকে নির্দেশ করছি


4
"_ভিউস্টার্ট" ফাইলটি যুক্ত না করে কী করার কোনও উপায় আছে (উদাহরণস্বরূপ, রাউটিং কনফিগারেশনের মাধ্যমে)?
মিখাইল

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

এছাড়াও আপনি যোগ করতে পারেন _ViewStartসরাসরি ফোন ফোল্ডার সরাসরি সব এলাকায় এটি প্রযোজ্য হবে।
আরতুর

21

জুপোলের উত্তরে প্রসারিত করা ....

কমপক্ষে ভিএস ২০১৩-তে, অঞ্চলটি তৈরি করার সময় _ ভিউস্টার্ট.সি.এইচটিএমএল ফাইলটি ডিফল্টরূপে যুক্ত করা হয়, সুতরাং এটি ইতিমধ্যে সেখানে রয়েছে এবং আপনি _Layout.cshtml এর দিকে নির্দেশ করার জন্য বিষয়বস্তু পরিবর্তন করতে পারেন। এরপরে আপনি এই অঞ্চলে _ লেআউট.সি.এস.টি.এম.এল.টি অপসারণ করতে পারেন, যেহেতু এটি আর ব্যবহার করা হয় না (এবং এখন বিভ্রান্তির একটি সম্ভাব্য উত্স)

তবে, এই রুটে যে কোনও রাউটিং সম্পাদন করে _Layout.cshtml এর ক্ষেত্রগুলি বিবেচনা করা দরকার।
ডিফল্ট _লআউটআর.সি.এস.টি.এম.এলএ বেশ কয়েকটি অ্যাকশনলিঙ্ক সহায়তা রয়েছে যার সামান্য পরিবর্তন দরকার:

অঞ্চল = "" সেট করে কোনও অ্যাকশনলিঙ্ক কলগুলিতে রুটভ্যালিউড অভিধান অভিধান পরম যুক্ত করুন। নোট করুন যে খালি স্ট্রিংটি মূল স্তরকে বোঝায়। এটি এই লিঙ্কগুলিকে কোনও অঞ্চলের মধ্য থেকে আহবান করার সময় সঠিকভাবে কাজ করতে দেয়, মূল থেকে ডেকে আনা হলে এখনও কাজ করে।

যেমন:

<li>@Html.ActionLink("Home", "Index", "Home", new { Area = "" }, null)</li>

2

আপনি এটি ব্যবহার করে একটি বিন্যাস নির্দিষ্ট করেছেন:

@; লেআউট = "_ লেআউট"; }

আপনি যদি এটিকে আরও একবারে পরিবর্তন করতে আরও সহজ করতে চান। সম্ভবত আপনি এটিকে কেবল একটি ভিউ ব্যাগ ভেরিয়েবল হিসাবে সেট করতে পারেন এবং এটি নিয়ন্ত্রণকারীকে দিয়ে দিতে পারেন। এটিকে আরও সহজ করার জন্য আপনি এমন একটি বেস কন্ট্রোলার তৈরি করতে পারেন যা অন্যান্য নিয়ামকরা উত্তরাধিকার সূত্রে পেয়ে থাকে এবং এটি সেখানে ভিউ ব্যাগের জন্য লেআউটটি নির্ধারণ করে দেয়।

কেন রাউটিংয়ের পরিবর্তনের প্রয়োজন হবে তা নিশ্চিত নয় বা সম্ভবত আমি বুঝতে পারি না। আশাকরি এটা সাহায্য করবে :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.