Błąd taki jak: Widok „LoginRegister” lub jego główny nie został znaleziony lub żaden silnik widoku nie obsługuje wyszukiwanych lokalizacji. Przeszukano następujące lokalizacje:
~ / Views / MyAccount / LoginRegister.aspx
~ / Views / MyAccount / LoginRegister.ascx
~ / Views / Shared / LoginRegister.aspx
~ / Views / Shared / LoginRegister.ascx
~ / Views / MyAccount / LoginRegister.cshtml
~ / Views / MyAccount / LoginRegister.vbhtml
~ / Views / Shared / LoginRegister.cshtml
~ / Views / Shared / LoginRegister.vbhtml
Właściwie moja strona widoku strony jest ~/Views/home/LoginRegister.cshtml
tym, co robię
i mój RouteConfig
jest
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "MyAccount", action = "LoginRegister", id = UrlParameter.Optional }
);
}
}
asp.net-mvc-4
user2564537
źródło
źródło
None
zamiastContent
przełączania ich i ponownego publikowania (lub po prostu kopiowania pliku) działało.Odpowiedzi:
Uważaj, jeśli typ Twojego modelu to String, ponieważ drugi parametr View (string, string) to masterName, a nie model . Może być konieczne wywołanie przeciążenia z obiektem (modelem) jako drugim parametrem:
Niepoprawne :
protected ActionResult ShowMessageResult(string msg) { return View("Message",msg); }
Poprawnie:
protected ActionResult ShowMessageResult(string msg) { return View("Message",(object)msg); }
LUB (dostarczone przez bradlis7):
protected ActionResult ShowMessageResult(string msg) { return View("Message",model:msg); }
źródło
(object)msg
, podaj argument jawnie:return View("Message", model: msg);
Problem:
Twojego
View
nie można znaleźć w domyślnych lokalizacjach.Wyjaśnienie:
Widoki powinny znajdować się w tym samym folderze o nazwie co folder
Controller
lub wShared
folderze.Rozwiązanie:
Przenieś swój
View
doMyAccount
folderu lub utwórz plikHomeController
.Alternatywy:
Jeśli nie chcesz przenosić
View
lub tworzyć nowych,Controller
możesz to sprawdzić pod tym linkiem .źródło
W Microsoft ASP.net MVC aparat routingu, który jest używany do analizowania przychodzących i wychodzących kombinacji adresów URL, został zaprojektowany zgodnie z ideą Konwencji zamiast konfiguracji. Oznacza to, że jeśli postępujesz zgodnie z Konwencją (regułami) używanymi przez silnik routingu, nie musisz zmieniać konfiguracji.
Silnik routingu dla ASP.net MVC nie obsługuje stron internetowych (.cshtml). Zapewnia sposób obsługi adresu URL przez klasę w kodzie, która może renderować tekst / html do strumienia wyjściowego lub analizować i obsługiwać pliki .cshtml w spójny sposób przy użyciu Konwencji.
Konwencja używana do routingu polega na dopasowaniu kontrolera do klasy o nazwie podobnej do
ControllerNameController
np.controller="MyAccount"
Oznacza znajdź klasę o nazwieMyAccountController
. Następnie następuje akcja, która jest odwzorowywana na funkcję w klasie kontrolera, która zwykle zwraca plikActionResult
. ieaction="LoginRegister"
będzie szukać funkcjipublic ActionResult LoginRegister(){}
w klasie kontrolera. Ta funkcja może zwrócić plik,View()
który według KonwencjiLoginRegister.cshtml
miałby nazwę i byłby przechowywany w/Views/MyAccount/
folderze.Podsumowując, miałbyś następujący kod:
/Controllers/MyAccountController.cs:
public class MyAccountController : Controller { public ActionResult LoginRegister() { return View(); } }
/Views/MyAccount/LoginRegister.cshtml: Twój plik widoku.
źródło
W akcji LoginRegister podczas zwracania widoku wykonaj poniższe czynności, wiem, że można to zrobić w mvc 5, nie jestem pewien, czy w mvc 4 również.
public ActionResult Index() { return View("~/Views/home/LoginRegister.cshtml"); }
źródło
Sprawdź akcję kompilacji swojego widoku (plik .cshtml). Powinna być ustawiona na zawartość. W niektórych przypadkach zauważyłem, że akcja kompilacji została ustawiona na Brak (przez pomyłkę) i ten konkretny widok nie został wdrożony na komputerze docelowym, mimo że widzisz ten widok w pliku projektu programu Visual Studio w prawidłowym folderze
źródło
Może to być problem z uprawnieniami.
Ostatnio miałem ten sam problem. W ramach testu utworzyłem prostą stronę hello.html. Kiedy próbowałem go załadować, otrzymałem komunikat o błędzie dotyczący uprawnień. Po rozwiązaniu problemu z uprawnieniami w głównym folderze sieciowym, zarówno strona html, jak i problemy z renderowaniem MVC zostały rozwiązane.
źródło
Sprawdź, czy utworzony widok (plik .ASPX) ma taką samą nazwę, jak nazwa wymieniona w kontrolerze. Na przykład:
public ActionResult GetView() { return View("MyView"); }
W takim przypadku plik aspx powinien mieć nazwę MyView.aspx zamiast GetView.aspx
źródło
Otrzymałem ten błąd, ponieważ zmieniłem nazwę mojego widoku (i akcji POST).
W końcu stwierdziłem, że zapomniałem zmienić nazwy ZARÓWNO GET, jak i POST na nową.
Rozwiązanie : zmień nazwy akcji GET i POST, aby były zgodne z nazwą widoku.
źródło
Jeśli problem pojawia się sporadycznie podczas produkcji, może to być spowodowane przerwaniem metody działania. Na przykład, podczas operacji POST obejmującej przesyłanie dużego pliku, użytkownik zamyka okno przeglądarki przed zakończeniem przesyłania. W takim przypadku metoda akcji może zgłosić zerowy wyjątek odwołania wynikający z zerowego modelu lub obiektu widoku. Rozwiązaniem byłoby zawinięcie treści metody w try / catch i zwrócenie wartości null. Lubię to:
[HttpPost] public ActionResult Post(...) { try { ... } catch (NullReferenceException ex) // could happen if POST is interrupted { // perhaps log a warning here return null; } return View(model); }
źródło
Miałem ten sam problem. Skopiowałem widok „Film” i odpowiednio zmieniłem jego nazwę na „Klient”. Zrobiłem to samo z modelami i kontrolerami.
To zadziałało.
Bardzo chciałbym poznać prawdziwą przyczynę problemu.
AKTUALIZACJA Tylko dla uśmiechów .... Wróciłem i ponownie odtworzyłem cały scenariusz zmiany nazwy ... i nie dostałem żadnych błędów.
źródło
Jeśli zaznaczyłeś wszystkie rzeczy z powyższych odpowiedzi (które są typowymi błędami) i masz pewność, że Twój widok znajduje się w lokalizacji w wyjątkach, może być konieczne ponowne uruchomienie programu Visual Studio.
:(
źródło
W moim przypadku musiałem użyć RedirectToAction, aby rozwiązać problem.
[HttpGet] [ControleDeAcessoAuthorize("Report/ExportToPDF")] public ActionResult ExportToPDF(int id, string month, string output) { try { // Validate if (output != "PDF") { throw new Exception("Invalid output."); } else { ...// code to generate report in PDF format } } catch (Exception ex) { return RedirectToAction("Error"); } } [ControleDeAcessoAuthorize("Report/Error")] public ActionResult Error() { return View(); }
źródło
Wpadłem na to jakiś czas temu i doprowadziło mnie to do szału, ponieważ okazało się to proste. Tak więc w moim widoku korzystałem z kontroli sieci, która uzyskiwała dane dla sieci za pośrednictwem żądania http. Gdy środkowa warstwa zakończyła moje żądanie i zwróciła zestaw danych, otrzymałem ten sam błąd. Okazuje się, że moje oświadczenie zwrotne brzmiało „widok powrotu (zestaw danych)”; zamiast 'return Json (dataset);
źródło
Natrafiłem na ten błąd z powodu niewłaściwego zamknięcia oświadczenia,
@using (Html.BeginForm ("DeleteSelected", "Employee", FormMethod.Post))
{
} // Ten nawias klamrowy musiał być zamknięty na końcu.
W pliku widoku Index.cshtml nie zamknąłem instrukcji na końcu programu. zamiast tego zakończyłem niepoprawne zamknięcie i napotkałem ten błąd.
Byłem pewien, że nie ma potrzeby sprawdzania kodu kontrolera ActionMethod, ponieważ poprawnie zwróciłem metodę kontrolera do widoku. Więc to musi być widok, który nie odpowiada i spotkał się z podobnym błędem.
źródło
Nie mogłem znaleźć rozwiązania tego problemu, dopóki nie dowiedziałem się, że pliki nie istnieją! Zajęło mi to dużo czasu, ponieważ Eksplorator rozwiązań pokazuje pliki!
Ale kiedy klikam plik Index.cshtml, pojawia się ten błąd:
To był powód, dla którego pojawił się ten błąd. Mam nadzieję, że ta odpowiedź komuś pomoże.
źródło