it-swarm.asia

عرض طريقة عرض من وحدة تحكم أخرى في ASP.NET MVC

هل من الممكن عرض وجهة نظر من وحدة تحكم أخرى؟

قل على سبيل المثال لدي CategoriesController و Category/NotFound.aspx. بينما في CategoriesController ، يمكنني بسهولة إرجاع View("NotFound").

قل الآن لدي ProductsController وإجراء وعرض لعرض منتج. ومع ذلك ، يتطلب هذا الإجراء أن يكون لدينا فئة لإضافة المنتج إليها. على سبيل المثال ، Products/Add/?catid=10.

إذا لم أتمكن من العثور على الفئة استنادًا إلى catid ، فأنا أرغب في عرض طريقة العرض NotFound من وحدة تحكم الفئات بدلاً من إنشاء طريقة عرض CategoryNotFound أسفل وحدة تحكم المنتجات.

هل هذا ممكن أم أنا هيكلة الأشياء بطريقة خاطئة؟ هل هناك طريقة جيدة للقيام بذلك؟

229
dtc

نعم فعلا. بشكل افتراضي ، يتحقق ASP.NET MVC أولاً في \Views\[Controller_Dir]\ ، ولكن بعد ذلك ، إذا لم يعثر على العرض ، فإنه يتحقق في \Views\Shared.

يوجد الدليل المشترك على وجه التحديد لمشاركة المشاهدات عبر وحدات تحكم متعددة. ما عليك سوى إضافة طريقة العرض الخاصة بك إلى الدليل الفرعي المشترك وستكون مستعدًا للذهاب.

إذا قمت بـ return View("~/Views/Wherever/SomeDir/MyView.aspx") ، يمكنك إرجاع أي طريقة عرض تريدها.

259
womp

يمكنك استخدام:

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

تم اختباره في ASP.NET MVC 3 ، ولكن يجب أن يعمل أيضًا في ASP.NET MVC 2.

157
Guillaume86

انه من الممكن. إرجاع طريقة RedirectToAction() مثل هذا:

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

هل جربت RedirectToAction؟

33
Paul Johnson

نعم تستطيع. إرجاع إجراء مثل هذا:

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

مثال:

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

وهذا النهج استدعاء الأسلوب GET

كما يمكنك تمرير قيم إلى العمل مثل هذا:

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
17
ignacio chiazzo

يمكنك أيضًا استدعاء أي وحدة تحكم من JavaScript / jQuery . لنفترض أن لديك وحدة تحكم تقوم بإرجاع 404 أو بعض أدوات التحكم/الصفحة الأخرى. بعد ذلك ، في بعض الإجراءات ، من رمز العميل الخاص بك ، يمكنك الاتصال ببعض العناوين التي ستطلق وحدة التحكم الخاصة بك وإرجاع النتيجة بـ HTML تنسيق يمكن أن يأخذ رمز العميل الخاص بك هذه النتيجة المرتجعة ووضعها في أي مكان تريد فيه صفحتك...

5
Marko

باستخدام هذا الرمز ، يمكنك الحصول على أي جهاز تحكم:

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