Die Ansicht oder ihr Master wurde nicht gefunden oder keine Ansichtsmaschine unterstützt die gesuchten Positionen


80

Fehler wie: Die Ansicht 'LoginRegister' oder ihr Master wurde nicht gefunden oder keine Ansichtsmaschine unterstützt die gesuchten Speicherorte. Folgende Standorte wurden gesucht:

~ / 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

Eigentlich ist meine Seitenaufrufseite ~/Views/home/LoginRegister.cshtmlso, was ich mache

und mein RouteConfigist

 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 }
            );
        }
    }

Verschieben Sie die LoginResiter-Ansicht in den richtigen Ordner (für den MyAccount-Controller).
Mansfield

Regler? Aber meine Seite ist Ansicht
Benutzer2564537

2
ASP.NET MVC erwartet, dass sich Ansichten für einen bestimmten Controller entweder im freigegebenen Ordner oder in einem Ordner mit dem Namen des Controllers befinden. Wie Sie sehen können, wird im Ordner "MyAccount" und im Ordner "Shared" gesucht. Wenn Sie eine Ansicht in einem Controller verwenden möchten, sollten Sie sie in dem Ordner mit diesem Controllernamen ablegen. Es hat nichts mit Ihrer Routenkonfiguration zu tun.
Mansfield

8
Ich habe diesen Fehler erhalten, nachdem ich eine Site auf einem anderen Computer veröffentlicht habe. Es stellte sich die Build - Aktion aus auf die Ansicht eingestellt wurde , Noneanstatt Contentso diejenigen und die erneute Veröffentlichung (oder nur das Kopieren der Datei) Umschalten gearbeitet.
Patrick

Antworten:


106

Seien Sie vorsichtig, wenn Ihr Modelltyp String ist, da der zweite Parameter von View (String, String) masterName und nicht model ist . Möglicherweise müssen Sie die Überladung mit Objekt (Modell) als zweiten Parameter aufrufen:

Nicht richtig :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",msg);
}

Richtig :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",(object)msg);
}

ODER (bereitgestellt von bradlis7):

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",model:msg);
}

16
Anstatt zu (object)msgreturn View("Message", model: msg);
gießen

1
Dies ist eine großartige Antwort
JsonStatham

31

Problem:

Sie Viewkönnen nicht an Standardspeicherorten gefunden werden.

Erläuterung:

Ansichten sollten sich in demselben Ordner befinden wie der Controlleroder im SharedOrdner.

Lösung:

Verschieben Sie Ihre entweder Viewin den MyAccountOrdner oder erstellen Sie eine HomeController.

Alternativen:

Wenn Sie Ihre nicht verschieben Viewoder eine neue erstellen möchten, Controllerkönnen Sie dies unter diesem Link überprüfen .


3
Wenn Sie dieses Problem haben, das ich gefunden habe, ist es am besten, einfach Ihre Ansicht zu löschen. (Kopieren Sie den Inhalt nach notepadd ++) Gehen Sie zu Ihrem Controller und klicken Sie mit der rechten Maustaste auf Ihr Aktionsergebnis und wählen Sie Ansicht generieren. Dann können Sie sehen, wo Ihr Controller nach Ihrer Ansicht gesucht hat, und Ihre Ansichten entsprechend platzieren.
Bill Blankenship

14

In Microsoft ASP.net MVC wurde die Routing-Engine, mit der eingehende und ausgehende URL-Kombinationen analysiert werden, mit der Idee der Konvention über die Konfiguration entwickelt. Dies bedeutet, dass Sie die Konfiguration nicht ändern müssen, wenn Sie die Konvention (Regeln) befolgen, die die Routing-Engine verwendet.

Die Routing-Engine für ASP.net MVC bedient keine Webseiten (.cshtml). Es bietet eine Möglichkeit, eine URL von einer Klasse in Ihrem Code zu verarbeiten, die Text / HTML in den Ausgabestream rendern oder die CSHTM-Dateien mithilfe von Konvention auf konsistente Weise analysieren und bereitstellen kann.

Das Übereinkommen , die für das Routing verwendet wird , ist mit einem Namen eines Controllers zu einer Klasse entsprechen ControllerNameControllerdh controller="MyAccount"Mittel namens finden Klasse MyAccountController. Als nächstes folgt die Aktion, die einer Funktion innerhalb der Controller-Klasse zugeordnet ist, die normalerweise eine zurückgibt ActionResult. dh action="LoginRegister"sucht nach einer Funktion public ActionResult LoginRegister(){}in der Klasse des Controllers. Diese Funktion kann eine zurückgeben, View()die gemäß der Konvention benannt LoginRegister.cshtmlund im /Views/MyAccount/Ordner gespeichert ist .

Zusammenfassend hätten Sie den folgenden Code:

/Controllers/MyAccountController.cs:

public class MyAccountController : Controller 
{
    public ActionResult LoginRegister()
    {
        return View();
    }
}

/Views/MyAccount/LoginRegister.cshtml: Ihre Ansichtsdatei.


8

In Ihrer LoginRegister-Aktion, wenn Sie die Ansicht zurückgeben, gehen Sie wie folgt vor. Ich weiß, dass dies in MVC 5 möglich ist. Ich bin mir nicht sicher, ob dies auch in MVC 4 möglich ist.

 public ActionResult Index()
 {
     return View("~/Views/home/LoginRegister.cshtml");
 }

5

Überprüfen Sie die Erstellungsaktion Ihrer Ansicht (.cshtml-Datei). Sie sollte auf Inhalt gesetzt sein. In einigen Fällen habe ich festgestellt, dass die Build-Aktion (aus Versehen) auf "Keine" gesetzt wurde und diese bestimmte Ansicht nicht auf dem Zielcomputer bereitgestellt wurde, obwohl diese Ansicht in der Visual Studio-Projektdatei unter einem gültigen Ordner vorhanden ist


1
In meinem Fall war es auch mit der Eigenschaft "Build Action" verbunden, aber ich musste sie auf "Embedded Resource" setzen
Ali Tahouri

3

Dies kann ein Berechtigungsproblem sein.

Ich hatte vor kurzem das gleiche Problem. Als Test habe ich eine einfache hello.html-Seite erstellt. Beim Versuch, es zu laden, wurde eine Fehlermeldung bezüglich der Berechtigungen angezeigt. Nachdem ich das Berechtigungsproblem im Stammwebordner behoben hatte, wurden sowohl die Probleme mit der HTML-Seite als auch mit dem MVC-Rendering behoben.


In meinem Fall war es auch ein Berechtigungsproblem, das authentifizierten Benutzern den Zugriff auf den Stammordner der Anwendung ermöglichte und das Entfernen des schreibgeschützten Flags das Problem behebt
Momin

2

Überprüfen Sie, ob die von Ihnen erstellte Ansicht (ASPX-Datei) denselben Namen hat wie im Controller angegeben. Zum Beispiel:

 public ActionResult GetView()
 {
    return View("MyView");
 }

In diesem Fall sollte die Aspx-Datei den Namen MyView.aspx anstelle von GetView.aspx haben


2

Ich habe diesen Fehler erhalten, weil ich meine Ansicht (und POST-Aktion) umbenannt habe.

Schließlich stellte ich fest, dass ich vergessen hatte, BEIDE GET- und POST-Aktionen in einen neuen Namen umzubenennen.

Lösung : Benennen Sie die Aktionen GET und POST so um, dass sie dem Namen der Ansicht entsprechen.


1

Wenn das Problem in der Produktion zeitweise auftritt, kann dies daran liegen, dass eine Aktionsmethode unterbrochen wird. Während eines POST-Vorgangs mit einem Upload großer Dateien schließt der Benutzer beispielsweise das Browserfenster, bevor der Upload abgeschlossen ist. In diesem Fall kann die Aktionsmethode eine Nullreferenzausnahme auslösen, die sich aus einem Nullmodell oder einem Ansichtsobjekt ergibt. Eine Lösung wäre, den Methodenkörper in einen try / catch zu verpacken und null zurückzugeben. So was:

[HttpPost]
public ActionResult Post(...)
{
    try
    {
        ...
    }
    catch (NullReferenceException ex)  // could happen if POST is interrupted
    {
        // perhaps log a warning here
        return null;
    }

    return View(model);
}

1

Ich hatte das gleiche Problem. Ich hatte eine Ansicht "Film" kopiert und entsprechend in "Kunde" umbenannt. Das habe ich auch mit den Modellen und den Controllern gemacht.

Die Lösung war folgende: Ich habe die Kundenansicht in "Kunde1" umbenannt und gerade eine neue Ansicht erstellt und sie "Kunde" genannt. Ich habe dann einfach den Code "Kunde1" in "Kunde" kopiert.

Das hat funktioniert.

Ich würde gerne die wahre Ursache des Problems kennen.

UPDATE Nur zum Grinsen ... Ich ging zurück und replizierte das gesamte Umbenennungsszenario erneut ... und bekam keine Fehler.


0

Wenn Sie alle Punkte aus den obigen Antworten überprüft haben (was häufige Fehler sind) und sicher sind, dass sich Ihre Ansicht an der Stelle in den Ausnahmen befindet, müssen Sie Visual Studio möglicherweise neu starten .

:(


0

In meinem Fall musste ich RedirectToAction verwenden, um das Problem zu lösen.

[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();
}

0

Ich bin vor einiger Zeit darauf gestoßen und es hat mich verrückt gemacht, weil es sich als einfach herausgestellt hat. Daher habe ich in meiner Ansicht ein Rastersteuerelement verwendet, das über eine http-Anforderung Daten für das Raster abgerufen hat. Nachdem die mittlere Ebene meine Anfrage abgeschlossen und den Datensatz zurückgegeben hatte, erhielt ich denselben Fehler. Es stellte sich heraus, dass meine return-Anweisung 'return View (Datensatz)' war. anstelle von 'return Json (Datensatz);


0

Ich bin auf diesen Fehler gestoßen, weil die Anweisung nicht ordnungsgemäß geschlossen wurde.

@using (Html.BeginForm ("DeleteSelected", "Employee", FormMethod.Post))

{

} // Diese geschweifte Klammer musste am Ende geschlossen werden.

In der Ansichtsdatei Index.cshtml. Ich habe die Anweisung am Ende des Programms nicht geschlossen. Stattdessen habe ich falsch geschlossen und bin auf diesen Fehler gestoßen.

Ich war mir sicher, dass der Controller ActionMethod-Code nicht überprüft werden muss, da ich die Controller-Methode ordnungsgemäß an die Ansicht zurückgegeben habe. Es muss also die Ansicht sein, die nicht reagiert und auf einen ähnlichen Fehler stößt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.