এএসপি.এনইটি এমভিসিতে অন্য একটি নিয়ামকের কাছ থেকে একটি দৃশ্য প্রদর্শন করুন


248

অন্য নিয়ামকের কাছ থেকে কোনও দর্শন প্রদর্শন করা সম্ভব?

উদাহরণস্বরূপ বলুন আমার কাছে একটি CategoriesControllerএবং একটি Category/NotFound.aspxদৃষ্টিভঙ্গি রয়েছে। থাকাকালীন CategoriesControllerআমি সহজেই ফিরতে পারি View("NotFound")

এখন বলুন আমার কাছে একটি ProductsControllerএবং একটি ক্রিয়া রয়েছে এবং একটি পণ্য যুক্ত করতে দেখুন। যাইহোক, এই ক্রিয়াটির প্রয়োজন হয় যে পণ্যটি যুক্ত করতে আমাদের একটি বিভাগ থাকা উচিত have উদাহরণস্বরূপ Products/Add/?catid=10,।

যদি আমি এর উপর ভিত্তি করে বিভাগটি সন্ধান করতে না catidপারি, তবে আমি পণ্য নিয়ামকের অধীনে NotFoundএকটি CategoryNotFoundভিউ তৈরির পরিবর্তে বিভাগগুলি নিয়ন্ত্রকের কাছ থেকে দৃশ্যটি দেখাতে চাই ।

এটি কি সম্ভব বা আমি ভুল উপায়ে বিষয়গুলি কাঠামোগত করছি? এটি করার কোনও ভাল উপায় আছে?

উত্তর:


283

হ্যাঁ. ডিফল্টরূপে, এএসপি.নেট এমভিসি প্রথমে চেক ইন করে \Views\[Controller_Dir]\, তবে এর পরে, যদি ভিউটি না খুঁজে পায় তবে এটি চেক ইন করে \Views\Shared

ভাগ করা ডিরেক্টরিটি সেখানে একাধিক কন্ট্রোলারের জুড়ে ভিউগুলি ভাগ করে নেওয়ার জন্য রয়েছে। ভাগ করা সাব-ডিরেক্টরিতে আপনার ভিউ যুক্ত করুন এবং আপনি যেতে ভাল।

আপনি যদি করেন তবে আপনার return View("~/Views/Wherever/SomeDir/MyView.aspx")পছন্দ মতো যে কোনও ভিউ ফেরত দিতে পারেন।


ধন্যবাদ, এই সমাধানটি আমার ব্যবহার করা উচিত বলে মনে হচ্ছে। আমি এখনও ভাবছি যদিও অন্য কোনও নিয়ামকের কাছ থেকে কোনও দৃশ্য প্রদর্শন করা সম্ভব কিনা। আমি ধারণা করছি এটি এমভিসিতে কিছু নিয়ম লঙ্ঘন করছে?
dtc

1
আপনি উপরে বর্ণিত পরিস্থিতিতে হ্যাঁ, আপনার ভাগ করা ফোল্ডারটি ব্যবহার করা উচিত।
জোনাথন ফ্রিল্যান্ড 21

69
হ্যাঁ, এটিও সম্ভব। আপনি যদি ভিউ ("~ / ভিউজ / যেখানেই থাকুন / সামারডির / মাইভিউ.এএসপিএক্স") করেন তবে আপনি যে কোনও ভিউ পছন্দ করতে পারেন return এটি প্রতি সেবার কোনও নির্দিষ্ট নিয়ম লঙ্ঘন করে না, তবে, এএসপি ডট নেট এমভিসি "" কনফারেন্স ওভার কনফারগেশন "সম্পর্কিত is অন্য কথায়, ফ্রেমওয়ার্কটি নির্দিষ্ট কনভেনশনগুলি ব্যবহার করে স্বয়ংক্রিয়ভাবে পরিচালনার জন্য নির্মিত হয় এবং আপনার যেখানে সম্ভব সেখানে এটি ব্যবহার করা উচিত।
womp

1
ব্যাখ্যার জন্য ধন্যবাদ। আমি জানতাম না ভিউগুলিকে এরকম বলা যেতে পারে। অবশ্যই ভাগ করা ডিরেক্টরিটি নিখুঁতভাবে কাজ করে :)
dtc

1
আমি কোনও কন্ট্রোলারে ছিলাম না, তাই আমাকে ব্যবহার করতে হয়েছিল new ViewResult { ViewName = "~/Views/Error/Unauthorised.cshtml" };এবং এটি কাজ করেছিল
নচট - মনিকা

162

তুমি ব্যবহার করতে পার:

return View("../Category/NotFound", model);

এটি এএসপি.নেট এমভিসি 3 তে পরীক্ষা করা হয়েছিল, তবে এটিএসপি নেট নেট এমভিসি 2 তেও কাজ করা উচিত।


3
এমভিসি 2 এ কাজ করে এবং আমি যে অস্বাভাবিক পরিস্থিতিটি মোকাবিলা করছি তার সবচেয়ে পরিষ্কার সমাধান হিসাবে দেখা গেছে।
টড মেনিয়ার

3
পুনঃভাগটি সেই লিঙ্কটিকে ত্রুটি হিসাবে রিপোর্ট করবে তবে এটি এখনও কার্যকর হয়।
কোডমনকিকিং

1
@ কোডমোনকিকিং - পুনঃ ভাগ করা 7 (ভিএস2012-এ) সঠিকভাবে এমন একটি পথ চিহ্নিত করে যা রূপরেখায় রয়েছে "~/Views/Category/NotFound.cshtml"
রিচার্ড ইভ

লক্ষণীয় মূল্য: এই সমাধানটি ডিসপ্লে মোডের সাথে কাজ করে, যেমন আপনার যদি "/ ক্যাটাগরি / নটফাউন্ড.মোবাইল.cshtml" ভিউ থাকে।
বেনউইলকোমেন

55

হ্যাঁ এটা সম্ভব. এর RedirectToAction()মতো পদ্ধতিটি ফেরত দিন :

return RedirectToAction("ActionOrViewName", "ControllerName");

1
আমি বিশ্বাস করি এটি অন্যথায় দ্বিতীয় প্যারামিটারটি রুটভ্যালু হ'ল
পি।

তবে এক্ষেত্রে আপনাকে ভিউ সমাধানের সাথে ভিন্নভাবে কন্ট্রোলারে ক্রিয়াটি লিখতে হবে।
tobbenb3

@ tobbenb3 ফলাফলের হার্ডকোডিংয়ের বিপরীতে এটি আরও অনেক ভাল সমাধান। যে কোনও উপায়ে আপনি কোনও পথের স্ট্রিং দিয়ে যাবেন না।
perustaja

34

আপনি চেষ্টা করেছেন RedirectToAction?


1
আমি বলব যে এটি যে কারও পক্ষে ফোল্ডারগুলি ভাগ করে নিতে চান না এমন এটির জন্য এমভিসি, নোট করুন যে অন্য সমস্ত সমাধানগুলির জন্য (যেমন সরাসরি পথ ব্যবহার করা) যে মতামতগুলি পুনরায় ফ্যাক্টর করার চেষ্টা করছেন তাকে মনে রাখা উচিত নয় এটি অন্য একটি নিয়ামক হিসাবেও ব্যবহৃত হচ্ছে, যার ফলে
অনাকাঙ্ক্ষিত

4
পুনঃনির্দেশ ছাড়া কিভাবে?
ভাগ্যবান

ভাগ করা ফোল্ডারগুলিতে ভিউ সরানোর চেয়ে আরও ভাল সমাধান
জুলাই

এই সমাধানটির জন্য নিয়ামকের উপর ক্রিয়া প্রয়োজন, দেখুন (ডিরেক্টপথ) কোনও ক্রিয়া ছাড়াই আউটপুট সরবরাহ করে। আপনি যখন কোনও ক্রিয়া যুক্ত করেন, আপনার এটিকে url এর মাধ্যমে সরাসরি অ্যাক্সেস থেকে আড়াল করার চিন্তা করা দরকার, এটি ব্রাউজারের ইতিহাসের ধাপ তৈরি করবে ইত্যাদি But তবে হ্যাঁ, এটি আমার যাওয়ার উপায়।
জান জহ্রাডনাক

3
RedirectToAction ব্রাউজারে একটি 302 প্রতিক্রিয়া কোড প্রেরণ করে। আপনি যখন 404 টি পাওয়া যায় না এমন পৃষ্ঠাটি দেখানোর চেষ্টা করছেন এটি উপযুক্ত নয়। অর্থাৎ, এই সমাধানটি কাজ করে বলে মনে হচ্ছে তবে এটি অনুসন্ধান ইঞ্জিনগুলিকে বিভ্রান্ত করবে।
নাইটওয়েল 888

20

হ্যা, তুমি পারো. এর মতো একটি ক্রিয়াকলাপ ফেরত দিন:

return RedirectToAction("View", "Name of Controller");

একটি উদাহরণ:

return RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");

এই পদ্ধতির জিইটি পদ্ধতি কল করবে

এছাড়াও আপনি এই জাতীয় ক্রিয়ায় মানগুলি পাস করতে পারেন:

return RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" });

এই পদ্ধতির সাথে আমি কীভাবে কোনও জিনিস পাঠাব?
জিরোইন

@ জিরোইন দেখুন
ইগ্যাসিও চিয়াজো

5
আপনি কোনও দর্শন ফিরিয়ে দিচ্ছেন না, আপনি কোনও ক্রিয়া ডাকছেন।
0014

সর্বোপরি আমার জন্য সহায়ক ছিল।
anil shrestha

5

আপনি জাভাস্ক্রিপ্ট / jQuery থেকে যে কোনও নিয়ামককে কল করতে পারেন । বলুন যে আপনার কাছে 404 বা অন্য কোনও ব্যবহারকারীর নিয়ন্ত্রণ / পৃষ্ঠা ফেরত দেওয়ার নিয়ামক রয়েছে। তারপরে, আপনার ক্লায়েন্ট কোড থেকে কিছু পদক্ষেপে, আপনি এমন কোনও ঠিকানায় কল করতে পারেন যা আপনার নিয়ামককে আগুন ধরিয়ে দেবে এবং ফলাফলটি এইচটিএমএল ফর্ম্যাটে ফিরে আসতে পারে আপনার ক্লায়েন্ট কোডটি এই প্রত্যাবর্তিত ফলাফল নিতে পারে এবং আপনি যেখানে চান সেখানে আপনার পৃষ্ঠাতে রেখে দিতে পারেন ...


আমি যে জানি না। মনে হচ্ছে এটি ভবিষ্যতে আমি ব্যবহার করতে পারি এমন কিছু। হ্যাঁ,
এমভিসি

1

এই কোড দিয়ে আপনি যে কোনও নিয়ামক পেতে পারেন:

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
controller);

অনুবাদ: এই কোড দিয়ে আপনি যে কোনও নিয়ামক পেতে পারেন: [কোড], শুভেচ্ছা,
রবার্ট কলম্বিয়া

3
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
নিক 3500
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.