وحدات تحكم متعددة تحمل اسم واحد في ASP.NET MVC 2
-
26-09-2019 - |
سؤال
أتلقى الخطأ التالي عند محاولة تشغيل تطبيق ASP.NET MVC:
وجد طلب "حساب" وحدات تحكم المطابقة التالية:
uqs.Controllers.Admin.AccountController
MvcApplication1.Controllers.AccountController
لقد بحثت في المشروع عن MvcApplication1.Controllers.AccountController
لإزالته ، لكن لا يمكنني العثور على تطابق.
أحاول تسجيل طريق لإصلاحه:
routes.MapRoute(
"LogAccount", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Account", action = "LogOn", id = "" },
new string[] { "uqs.Controllers.Admin" } // Parameter defaults
);
لكن هذا لم يحلها.
تم العثور على أنواع متعددة تتطابق مع وحدة التحكم المسماة "حساب".
كيف يمكنني إصلاح هذه المشكلة؟
المحلول
لا يمكن أن يكون لديك أكثر من وحدة تحكم واحدة Account
في التطبيق الخاص بك ، حتى في مساحات الأسماء المختلفة.
يجب عليك تقسيم وحدات التحكم هذه بواسطة Area
(ميزة في ASP.NET MVC 2).
إذا قمت بإجراء اكتشاف ل AccountController
ستجد جميع وحدات التحكم المسمى Account
في طلبك ؛ ونقلهم إلى مختلف Areas
إذا كنت تريد كلاهما ، أو حذف واحدة.
نصائح أخرى
إذا قمت بإعادة تشكيل مشروعك وقمت بتغيير مساحة الاسم والتجميع الافتراضية من "mvcapplication1" إلى "uqs" ، فقد ينتهي بك الأمر بمجموعتين في دليل bin الخاص بك (واحد جديد والقديم). يمكنك الحصول على هذا الخطأ لأن حساب الحساب في كلتا التجميعات.
قم بتنظيف دليل الحاوية الخاص بك من MVCapplication1.dll القديم.
كان نفس المشكلة. نظفت الصندوق وكنت على ما يرام.
يمكن أن يحدث تباين مربك بعض الشيء في المشكلة (مماثلة من حيث أنها تسبب نفس رسالة الخطأ) حتى مع وجود مساحات الأسماء المقدمة. MVC 3 أعتقد أنه أكثر انتقائية من MVC 2 على هذه الجبهة.
اجابة قصيرة:
تأكد من أن مساحة وحدة التحكم الخاصة بك هي في الواقع مساحة الاسم المحددة في MapRoute
يتصل!!
اجابة طويلة:
لدي 3 مجالات: default ("")
/ Facebook
/ Store
وكان كل منهم لديهم AdminController
لديّ الطريق تم تعيينه مثل هذا (لمنطقي الافتراضي):
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Gateway", action = "Index", id = UrlParameter.Optional },
new string[] { "RR.Controllers.Main" }
);
أعطى طلب /المسؤول الخطأ التالي:
تم العثور على أنواع متعددة تتطابق مع وحدة التحكم المسماة "المسؤول". يمكن أن يحدث هذا إذا كان المسار الذي يخدم هذا الطلب ('{Controller}/{Action}/{id}') لا يحدد مساحات الأسماء ...
وجد طلب "المسؤول" وحدات التحكم المطابقة التالية:
rr.facebookControllers.AdMinController
RR.Controllers.AdMinController
rr.storecontrollers.admincontroller
لكن انتظر دقيقة! ألم أحدد مساحة اسم وحدة التحكم ....؟ ماذا يحدث هنا.... ؟
حسنًا ، اتضح أن مساحة اسم وحدة التحكم في المنطقة الافتراضية الخاصة بي كانت RR_MVC.Controller
بدلاً من Rolling_Razor_MVC.Controller.Main
.
لسبب ما في MVC 2 ، لم يعطي هذا مشكلة ، ولكن في MVC 3. أعتقد أن MVC 3 يتطلب منك فقط أن تكون أكثر وضوحًا عندما يكون هناك غموض محتمل.
AccountController
يتم إنشاؤه تلقائيًا بواسطة قالب ASP.NET MVC Visual Studio. يقع في Controllers\AccountController.cs
. حاول البحث عنه في المشروع وحذفه.
واجهت هذه المشكلة ...
تم حلها عن طريق إزالة مرجع المشروع في أحد ملفات .csproj