Metoda działania publicznego ".." nie został znaleziony na kontrolerze ".."


Chciałem umieścić losowy obraz na każdej stronie przeglądania mojego projektu MVC. Dlatego stworzyłem metodę, która zwraca partializację i powoduje, że ta metoda na stronie Udostępniona Układ.
Działa to świetnie, gdy próbuję zalogować się przy użyciu poprawnej nazwy użytkownika i hasła. Użytkownik loguje się, a każda strona zawiera losowy obraz. Ale kiedy podam złą kombinację nazwy użytkownika i hasła. Strona ogólnego układu nie znajduje kontrolera, który chcę wywołać z moim
@ Html.Action
i w rzeczywistości widok logowania powinien zostać zwrócony z komunikatem o błędzie „nieprawidłowa kombinacja nazwy użytkownika i hasła” i oczywiście to samo , z losowym obrazem.
InnerException:

{„Nie znaleziono metody akcji publicznej„ RandomSponsor ”w kontrolerze„ Project.WebUI.Controllers.HomeController ”."}

Mój html.Action we wspólnym układzie.
@Html.Action("RandomSponsor", "Home")

Metoda w HomeController.
[HttpGet] 
[ChildActionOnly]
public ActionResult RandomSponsor()
{
var model = service.getRandomSponsor();
return PartialView("RandomSponsor", model);
}

Metoda getRandomSponsor działa dobrze, zawsze zwraca jedną losową wartość ciągu, która jest zwracana do widoku RandomSponsor.cshtml.
RandomSponsor.schtml (zawiera tylko ciąg obrazu)
<img src="~/Content/Images/Advert/@(Model)" alt="a"/>

Szukałem tego problemu w Internecie, ale nie znalazłem rozwiązania, czy ktoś znał odpowiedź na to pytanie?
Może to coś z HttpGet z HttpPost?
Z poważaniem.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli wykonywane żądanie to
POST
, spróbuje znaleźć metodę
RandomSponsor
, która akceptuje
HttpPost
. Jeśli ma to sens, możesz usunąć
HttpGet
i to powinno załatwić sprawę.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Może również wystąpić, jeśli masz wiele poziomów połączeń, które rozpoczynają się od postu (miałem akcję, która zwraca pokwitowanie, które zwraca częściową reprezentację, która wywołuje renderaction), wywołanie renderuje nadal wyszukuje metodę postu
Bardzo podobny do tego problemu, który miałem tutaj -

jak rozwiązać problem „metoda akcji publicznej” methodActionName ”nie została znaleziona na kontrolerze„ controllerNameController ””
https://coderoad.ru/34646323/
A jeśli chcesz nadal akceptować czasownik HTTP GET i rozwiązać problem kaskadowego żądania postu, aby uzyskać żądanie, dodaj to do swojej metody

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post

)]
Należy pamiętać, że [httpget] jest taki sam jak

[AcceptVerbs(HttpVerbs.Get

)]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spowoduje to nastąpi, jeśli zapytanie jest post , ale metoda sterownika adnotuje [httpget] . Na przykład możesz podać
Post
, co zwraca widok zawierający częściowe widoki zwane za pomocą
@ html.Action
za pomocą metod sterownika adnotowanych za pomocą
[Httpget]
. Jeśli żądanie źródła jest post , a następnie wszystkie metody kontrolera spowodowane przez następnie będą musiały obsługiwać post .
Aby to naprawić, możesz użyć atrybutu
AcceptVerbs
, aby wskazać, że metoda kontrolera akceptuje zarówno
POST
, jak i
GET
:
[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ten błąd pojawił się nagle w kilku różnych PartialViews (nie wszystkich) podczas dostosowywania konfiguracji MVCForum. Nie wprowadziliśmy żadnych zmian w metodach ani poglądach na temat błędów, więc bardzo frustrujące było to, że zostały zepsute.
Po wypróbowaniu innych rozwiązań w tym poście i innych, wróciliśmy do wprowadzonych przez nas zmian i ostatecznie zatrzymaliśmy błędy, ponieważ zmieniliśmy powiązania w usługach IIS na inną domenę, w której włączona jest reguła przepisywania. „Wymuś adres URL z małymi literami” adres URL.
Kiedy odłączyliśmy zasadę wymuszonego użycia dolnego rejestru, błędy zatrzymały się, a strona działała tak, jak powinna mieć. To nie jest problem przepisania adresu URL (nie sądzę), ponieważ możemy zmusić do użycia www używając go bez błędów. Jest to problem przepisania w małych literach. Nie miało znaczenia, czy mieliśmy zasadę niższego rejestru przed lub po zasadzie WWW.
To rozwiązanie prawdopodobnie nie ma zastosowania w wielu przypadkach tego błędu, ale zadziałało. Miejmy nadzieję, że ktoś inny odniesie korzyści z tak prostej poprawki.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku ten sam problem zdarzył się losowo z ukrytym
Użyj (html.beginform ())
Zmień wyżej o
Użyj (html.beginform ("akcja", "kontroler", formmethod.post))
Naprawiono ten problem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wiem, że to dość stary temat, ale ponieważ jest to najlepszy wynik Google, pomyślałem, że dodam potencjalnie brakujący link do MVC.Net 5.2.6.

Scenariusz

Próbowałem spowodować spółkę zależną przez @ html.Action ("ActionName", nowy {ID = 123}) i otrzymał błąd, bardzo podobny do powyższego opisanego powyżej, ale żaden z innych rozwiązań działało. Mogę trafić na działanie kontrolera zewnętrznie (na przykład httpget), ale działanie dziecka nadal rzuciło wyjątek i pojechał mnie do szału!

Rozwiązanie, które znalazłem

Po dwukrotnym tyle i wciągu przez jakiś czas zacząłem grać z moimi atrybutami routingu. Skonfigurowałem kontroler w następujący sposób:
[Route("{action}")]
[RoutePrefix("Prefix")]
[RouteArea("AreaName")]

Ponieważ poszedł tylko jedna publiczna akcja, którą chciałem, "indeks", usunięłem {działanie} i umieściłem wyraźny atrybut trasy do działań publicznych, a twój atrybut dla dziecka wrócił do spółki zależnej.
Po tym, jak zrobiłem, wpadłem do ucieczki, a Hej, Pretto - akcja była zdumiona.
Możliwe jest wypróbowanie, jeśli otrzymasz ten błąd podczas korzystania z trasowania atrybutu.

Zauważ, że próbowałem pokierować działaniem dziecka i to nie zadziałało.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Właśnie zdecydowałem ten problem dziwnie na moim lokalnym komputerze, upewniając się, że cała moja ścieżka zapytania była płaska. Więc spróbuj.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czy wstrzyknąłeś mu
Html.RenderAction
? Zwykle jest szybszy niż
Html.Action
, ponieważ współdziała bezpośrednio ze strumieniem odpowiedzi, a nie tworzy ciąg.
Więcej informacji można znaleźć w następujących sekcjach:

Należy również zauważyć, że w przypadku
Html.Action
lub
Html.RenderAction
widok nie musi być w

Generał

folder, jest to potrzebne tylko wtedy, gdy używasz
Html.Partial
lub
Html.RenderPartial

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się