2010-04-13 38 views
12

tôi nhận được lỗi sau khi cố gắng chạy ứng dụng ASP.NET MVC của tôi:Nhiều điều khiển với một Tên trong ASP.NET MVC 2

Yêu cầu 'Tài khoản' đã tìm thấy các bộ điều khiển phù hợp sau đây: uqs.Controllers.Admin.AccountController MvcApplication1.Controllers.AccountController

tôi đã tìm kiếm dự án cho MvcApplication1.Controllers.AccountController để xoá bỏ nó, nhưng tôi không thể tìm thấy một trận đấu.

tôi cố gắng đăng ký một con đường để sửa chữa nó:

routes.MapRoute(
    "LogAccount", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Account", action = "LogOn", id = "" }, 
    new string[] { "uqs.Controllers.Admin" } // Parameter defaults 
); 

nhưng điều đó không giải quyết nó.

Nhiều loại được tìm thấy khớp với bộ điều khiển có tên 'Tài khoản'.

Làm cách nào để khắc phục sự cố này?

Trả lời

10

Bạn không thể có nhiều bộ điều khiển có tên Account trong ứng dụng của mình, ngay cả trong các không gian tên khác nhau.

Bạn phải có các bộ điều khiển này được chia nhỏ theo Area (một tính năng trong ASP.NET MVC 2).

Nếu bạn tiến hành Tìm kiếm AccountController bạn sẽ tìm thấy tất cả các trình điều khiển có tên Account trong đơn đăng ký của bạn; và di chuyển chúng ra thành Areas khác nhau nếu bạn muốn cả hai hoặc xóa một.

+5

Bạn có chắc chắn không? Tôi có hai bộ điều khiển trong các không gian tên khác nhau, một bộ điều khiển kế thừa từ một không gian tên khác và tôi không sử dụng các Vùng. Đặt không gian tên trong MapRoute (giống như lovjii làm ở trên) đã sửa thông báo lỗi chính xác tương tự. Sự khác biệt mà bộ điều khiển của tôi kế thừa từ nhau? –

0

AccountController được tạo tự động bởi mẫu ASP.NET MVC Visual Studio. Nó nằm ở Controllers\AccountController.cs. Hãy thử tìm kiếm nó trong dự án và xóa nó.

+0

xin lỗi, có thể tôi không thể giải thích được sự cố của mình. nhưng, tôi biết vị trí AccountController nằm ở đâu. nhưng tôi không có không gian tên với tên MvcApplication1.Controllers.AccountController, tôi đổi tên nó thành uqs.Controllers.Admin. và cố gắng chạy ứng dụng web của tôi. – loviji

60

Nếu bạn refactor dự án của bạn và thay đổi không gian tên và hội từ mặc định từ "MVCApplication1" thành "uqs", bạn có thể kết thúc với 2 hội đồng trong thư mục bin của bạn (cái mới và cũ). Bạn có thể nhận được lỗi này vì AccountController nằm trong cả hai assembly.

Làm sạch thư mục bin của bạn của MVCApplication1.dll cũ.

+7

cổ vũ người đàn ông, tôi đã có vấn đề này trước và kết thúc việc tạo ra một dự án mới vì tôi không thể tìm ra vấn đề là gì - tôi đã ngớ ngẩn nghĩ rằng một sạch sẽ xóa thư mục bin, không phải vậy nếu tôi đã thay đổi tên lắp ráp eh ?? !! – jcvandan

+6

Đây là câu trả lời đúng - nên được chấp nhận như vậy. – LiverpoolsNumber9

+2

Tôi đổi tên dự án của mình và có tệp dll cũ vẫn còn trong thư mục bin của tôi - điều này đã khắc phục được sự cố của tôi. Cảm ơn! – dadwithkids

3

Một biến thể hơi khó hiểu về vấn đề (tương tự ở chỗ nó gây ra thông báo lỗi tương tự) có thể xảy ra ngay cả với không gian tên được cung cấp. MVC 3 Tôi nghĩ là một chút pickier hơn MVC 2 trên mặt trận này.


ngắn Trả lời:

Hãy chắc chắn rằng không gian tên của điều khiển của bạn là trong thực tế không gian tên được quy định trong MapRoute gọi !!


dài trả lời:

Tôi có 3 lĩnh vực: default ("")/Facebook/Store và họ từng có AdminController

Tôi có con đường ánh xạ như thế này (đối với khu vực mặc định của tôi):

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Gateway", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "RR.Controllers.Main" } 
); 

Yêu cầu đến/quản trị đã đưa ra lỗi sau:

Nhiều loại được tìm thấy phù hợp với trình điều khiển có tên 'quản trị'. Điều này có thể xảy ra nếu con đường mà các dịch vụ yêu cầu này ('{controller}/{action}/{id}') không xác định không gian tên ...

Yêu cầu 'admin' đã tìm thấy sau phù hợp với các bộ điều khiển:

RR.FacebookControllers.AdminController
RR.Controllers.AdminController
RR.StoreControllers.AdminController

Nhưng chờ một phút! Tôi đã không chỉ định không gian tên bộ điều khiển ....? Chuyện gì vậy ....?

Vâng hóa ra không gian tên bộ điều khiển quản trị của khu vực mặc định của tôi là RR_MVC.Controller thay vì Rolling_Razor_MVC.Controller.Main.

Vì một số lý do trong MVC 2, điều này không gây ra vấn đề gì, nhưng trong MVC 3 nó có. Tôi nghĩ MVC 3 yêu cầu bạn phải rõ ràng hơn khi có sự mơ hồ tiềm ẩn.

0

Tôi có vấn đề này ...

giải quyết bằng cách loại bỏ một tài liệu tham khảo dự án thuộc một trong các tập tin csproj

4

có vấn đề này như vậy. Làm sạch thùng rác và tôi đã sẵn sàng để đi.

+1

Không đủ để làm sạch giải pháp, tôi cũng cần xóa các tệp .dll cũ khỏi thùng rác – Noah

Các vấn đề liên quan