Kiedy dokonuję zmiany w modyfikatorze dostępu klasy kontrolera, powoduje to błąd. Jeśli udostępnienie metody działania jest niepubliczne, powoduje to również błąd (w szczególności nie znaleziono strony o błędzie ). Dlaczego tak jest?Dlaczego klasy kontrolera ASP.NET MVC muszą być publiczne?
Odpowiedz
Domyślnie, jeśli nie określisz żadnego modyfikatora dostępu dla klasy, to domyślnie będzie to internal
w języku C#. Tylko kod w tym samym zespole może uzyskać dostęp do klasy, która jest internal
. Jeśli więc kontrolerem jest internal
, kod, który tworzy instancję kontrolera po otrzymaniu żądania, musi znajdować się w zespole.
Jednak kod tworzenia kontrolera jest obecny w zespole System.Web.Mvc
i domyślnie DefaultControllerFactory
jest odpowiedzialny za tworzenie kontrolerów. Jeśli twój kod jest obecny na przykład w zespole MvcApplication1, to DefaultControllerFActory nie może znaleźć twoich klas kontrolerów bez modyfikatora publicznego dostępu, więc nie jest w stanie ich utworzyć.
Jeśli chcesz zbudować ściśle powiązaną aplikację ASP.NET MVC (do której nie jest przeznaczona), teoretycznie możesz zrobić to po kolei.
- Uzyskaj kod źródłowy MVC, jeśli jest dostępny.
- Następnie skompiluj swój kod w tym samym zespole.
- 1. Dlaczego pola @Rule z adnotacjami w JUnit muszą być publiczne?
- 2. ASP.NET MVC - przekazywania parametrów do kontrolera
- 3. zmiana nazwy kontrolera asp.net mvc
- 4. Dlaczego konstruktory regex muszą być podwójnie uciekane?
- 5. ASP.NET MVC: Grupowanie klas wokół kontrolera
- 6. chronione/publiczne Klasy wewnętrzne
- 7. Przekierowanie nieautoryzowanego kontrolera w ASP.NET MVC
- 8. Kopiowanie konstruktora powinno być prywatne lub publiczne
- 9. Zmienna „runnable” muszą być inicjowane
- 10. ASP.NET MVC: wystąpienie kontrolera dostępu z widoku
- 11. ASP.NET MVC - Bieżąca akcja z kodu kontrolera?
- 12. ASP.Net MVC Odświeżenie wartości etykiety do kontrolera
- 13. Macierz przestrzeni nazw kontrolera ASP.Net MVC
- 14. Kiedy używać kontrolera API kontra kontrolera MVC
- 15. Dlaczego dwie klasy publiczne nie mogą być zdefiniowane w jednym pliku w java?
- 16. ASP.NET MVC - Dostęp do właściwości kontrolera w ActionFilter
- 17. Fragmenty Androida muszą być statyczne.
- 18. dlaczego negując wartości wiążą się knockoutjs muszą być odwinął
- 19. Dlaczego SQL Server Widoki muszą być odświeżane co jakiś czas
- 20. Dlaczego zmienne przekazane do uruchomienia muszą być ostateczne?
- 21. Dlaczego warianty Niektóre i Żadne opcji nie muszą być kwalifikowane?
- 22. ui-router Dlaczego stany macierzyste muszą być abstrakcyjne
- 23. Dlaczego glLoadIdentity muszą być wywoływane po każdym wywołaniu do glMatrixMode?
- 24. Dlaczego właściwości zależności w WPF muszą być statyczne
- 25. Dlaczego tekstowe we/wy muszą być buforowane w pythonie 3?
- 26. Niestandardowe adnotacje danych klas i MVC klasy ASP.NET MVC
- 27. statyczne klasy w Asp.NET MVC aplikacji
- 28. Wymuś działanie filtru dla wszystkich akcji kontrolera (C#/ASP.NET MVC)
- 29. Czy ASP.NET MVC musi być zainstalowany na moim serwerze produkcyjnym?
- 30. Dlaczego pola klasy przypadku Scala nie są publiczne?
, ale kiedy uczynię kontroler jako wewnętrzny, powinien on wygenerować błąd czasu kompilacji. Domyślnie klasa ma wewnętrzny modyfikator dostępu, dlatego kod nie zwraca błędu kompilacji. Moje pytanie jest takie, że jeśli sprawię, że kontroler będzie wewnętrzny, to powiodą się, ale kiedy sprawię, że kontroler będzie chroniony wewnętrznie, zwróci błąd kompilacji. –
Kompilator nie wie, że kompilujesz dla MVC lub innej aplikacji C#. Po prostu kompiluje się zgodnie z zasadami. Reguły mówią, że możesz zadeklarować klasę wewnętrzną na poziomie root (wewnątrz przestrzeni nazw), ale nie możesz utworzyć chronionej klasy wewnętrznej na poziomie root, ale możesz utworzyć klasę zagnieżdżoną z wewnętrznie zabezpieczoną. – dotnetstep