عرض وجهة نظر من وحدة تحكم أخرى في ASP.NET MVC
-
22-08-2019 - |
سؤال
هل من الممكن لعرض وجهة نظر من وحدة تحكم أخرى؟
ويقول على سبيل المثال لدي CategoriesController
وجهة نظر Category/NotFound.aspx
. بينما في CategoriesController
، أستطيع العودة ياسلي View("NotFound")
.
والآن أقول لدي ProductsController
وعمل وعرض لإضافة منتج. ومع ذلك، يتطلب هذا الإجراء أن لدينا فئة لإضافة المنتج ل. على سبيل المثال، Products/Add/?catid=10
.
إذا أنا لست قادرا على العثور على الفئة على أساس catid
، أريد أن أثبت وجهة نظر NotFound
من وحدة تحكم الفئات بدلا من إنشاء عرض CategoryNotFound
تحت تحكم المنتجات.
هل هذا ممكن أم أنني هيكلة الأمور بطريقة خاطئة؟ هل هناك طريقة جيدة للقيام بذلك؟
المحلول
نعم. افتراضيا، يتحقق ASP.NET MVC أولا في \Views\[Controller_Dir]\
، ولكن بعد ذلك، إذا كان لا يجد طريقة العرض، فإنه يتحقق في \Views\Shared
.
والدليل المشتركة هناك على وجه التحديد لتبادل وجهات النظر عبر وحدات تحكم متعددة. فقط إضافة الملف إلى الدليل الفرعي المشتركة، وكنت على ما يرام.
إذا لم return View("~/Views/Wherever/SomeDir/MyView.aspx")
يمكنك العودة أي عرض ما تريد.
نصائح أخرى
ويمكنك استخدام:
return View("../Category/NotFound", model);
وتم اختباره في ASP.NET MVC 3، ولكن يجب أيضا العمل في ASP.NET MVC 2.
ونعم من الممكن.
إرجاع طريقة RedirectToAction()
مثل هذا:
return RedirectToAction("ActionOrViewName", "ControllerName");
هل حاولت RedirectToAction
؟
نعم، يمكنك. إرجاع عمل من هذا القبيل:
return RedirectToAction("View", "Name of Controller");
وعلى سبيل المثال:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");
وهذا النهج سوف استدعاء الأسلوب GET
وأيضا هل يمكن أن يمر القيم إلى عمل مثل هذا:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
ويمكنك أيضا استدعاء أي تحكم من جافا سكريبت / <لأ href = "HTTP: / /en.wikipedia.org/wiki/JQuery "يختلط =" نوفولو noreferrer "> مسج . نقول لديك وحدة تحكم العائدين 404 أو بعض usercontrol أخرى / صفحة. بعد ذلك، في بعض الإجراءات، من رمز العميل الخاص بك، يمكنك الاتصال بعض العناوين التي سوف تطلق جهاز تحكم وإرجاع النتيجة في <لأ href = "http://en.wikipedia.org/wiki/HTML" يختلط = "noreferrer نوفولو "شكل> HTML رمز العميل الخاص بك ويمكن أن تتخذ هذه النتيجة عاد ووضعها في أي مكان تريد في صفحتك لك ...
مع هذا الرمز يمكنك الحصول على أية وحدة تحكم:
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext,
controller);