11 Stimmen

MVC 3 sucht nicht nach Ansichten unter Bereichen.

Ich verwende mehrere Bereiche in MVC 3 und habe Probleme damit, dass meine Ansichten nicht gefunden werden. Die Routing-Funktion scheint meine Controller richtig zu erkennen (alle Aktionen werden ohne Probleme ausgeführt), aber wenn ich eine Ansicht zurückgebe, findet MVC sie einfach nicht.

Also, wenn ich einen einfachen Controller namens 'Thing' in einem Bereich namens 'Some' habe und folgendes mache...

public ActionResult Index()
{
    return View("Index");
}

Die Aktion wird korrekt ausgeführt, aber MVC findet die Ansicht nicht und ich erhalte eine Meldung wie beispielsweise

Die Ansicht 'Index' oder ihr Master wurde nicht gefunden... Und es zeigt mir alle durchsuchten Orte an, die sein werden

~/Views/Thing/Index.cshtml ~/Views/Shared/Index.cshtml

usw., aber es sucht nicht in

~/Some/Views/Thing/Index.cshtml

Irgendwelche Ideen, was ich falsch mache?

0 Stimmen

Hast du deine Bereichsregistrierungsdateien an den richtigen Stellen?

0 Stimmen

Hast du versucht, es ohne viewname zu testen? Standardmäßig wird der Name der Aktionmethode als viewname verwendet. return View();

0voto

Tobias Punkte 2895

Hast du (durch Setzen eines Breakpoints) überprüft, ob die Controller-Methode aufgerufen wird?

Die von dir aufgelisteten Seiten, auf denen die Ansicht gesucht wird, befinden sich nicht im Bereich "some". Von wo aus rufst du den Link auf?

Wenn du den Link aus einem anderen Bereich oder vom Root aufrufst, musst du den Bereich im Aktionslink festlegen:

 @Html.ActionLink("Gehe zu Some/Thing", "Index", "Thing", new {area="Some"}, null)

0voto

Eddie Punkte 680

Nur um hier noch eine weitere Lösung hinzuzufügen. Ich hatte auch dieses Problem, aber bei mir lag es daran, dass ich eine konkurrierende "Catch-All"-Route in der Global.asax.cs hatte.

Das Entfernen dieser Route hat das Problem behoben.

0voto

Codelover Punkte 51

Versuchen Sie es in RouteConfig.cs.

Vielleicht wird es für jemanden hilfreich sein.

      routes.MapRoute(
            name: "Standard",
            url: "{controller}/{action}/{id}",
            defaults: new {controller = "Controllername", action = "Actionname", id = UrlParameter.Optional },
            namespaces: new [] { "Projectname.Areas.Areaname.Controllers" }

            ).DataTokens.Add("Bereich", "Areaname");

-1voto

AD.Net Punkte 13256

Standardmäßig wird es nicht in *~Einige/*Views..... suchen (Ich bin mir nicht sicher, wie man das erzwingen kann), die Konvention wäre ~/Ansichten/......, also wäre das der richtige Ort, um die Ansicht hinzuzufügen. Wenn Sie möchten, dass die URL "Einige" enthält, können Sie das Routing ändern, um das zu ermöglichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X