MVC - Nicht auflösen view (Controller und views werden in separaten Projekten)
Habe ich eine Lösung mit 4 Projekte:
AS.Core.Common
(Referenzen: Daten, Internet)AS.Core.Controllers
(Referenzen: Common, Data, Web)AS.Core.Data
AS.Core.Web
(Referenzen: Daten)
In meinem Controller, überall, dass ich wieder ein Ansicht:
return View("~/Views/Home/Index.cshtml");
Ist es rot markiert und ich bekomme eine "Cannot resolve view '~/Views/Home/Index.cshtml'"
.
Alle vier Projekte erfolgreich erstellen aber wenn ich dann F5 gedrückt, bekomme ich die folgende:
Server Error in '/' Application.
Die Ressource kann nicht gefunden werden.
Beschreibung: HTTP 404. Die Ressource, die Sie suchen (oder eine seiner
Abhängigkeiten) wurde möglicherweise entfernt, hatte Ihren Namen geändert, oder ist
vorübergehend nicht verfügbar. Bitte Lesen Sie den folgenden URL, und stellen Sie
sicher, dass es richtig geschrieben ist.Angeforderte URL: /
Version Information: Microsoft .NET Framework, Version:4.0.30319;
ASP.NET-Version:4.0.30319.17929
Wie kann ich meine Controller zu sehen, wie meine Ansichten, so dass Sie korrekt aufgelöst werden? Ich gehe davon aus das ist der Grund, warum ich die 404-Antwort.
Meine Global.asax.cs
ungefähr so Aussehen:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//Register the default hubs route: ~/signalr
RouteTable.Routes.MapHubs();
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
Meine RouteConfig.cs
(ich Hinzugefügt, namespaces, aber es scheint nicht geholfen)
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
namespaces: new[] { "AS.Core.Controllers" },
defaults: new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
}
Dies ist mein HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
//return View("~/Views/Home/Index.cshtml");
return View();
}
}
Ich habe meine routing zu meinem ursprünglichen post.
Sorry, nicht klar genug 🙂 was ist in der RouteConfig.RegisterRoutes(RouteTable.Routen) - Methode.
Ich denke, Sie haben nicht einen HomeController.cs enthält die Klasse HomeController mit einer Methode mit dem Namen Index() ??
Gerade gesehen (im anderen Kommentar), dass Ihr Controller ist in einem anderen Projekt, richtig? Dann sollte man wohl hinzufügen namespaces: new string[]{"YourControllerProjsNameSpace"} in Ihrem MapRoute() .
InformationsquelleAutor Mithrilhall | 2013-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
In asp.net-mvc kehren Sie könnten eine gültige Ansicht in der jeweiligen controller-Ansichten-Ordner. Zum Beispiel, wenn man einen controller bezeichnete Produkt, Sie können einen Ordner im Pfad
~/Views/Product/Index.cshtml
. In IhremIndex
Aktion, Sie einfach nur wieder eine Sicht mithilfe derView()
Methode derController
- Klasse-Basis, dass alle Controller in asp.net mvc sollte, erbt. Zum Beispiel:Asp.Net finden Sie eine Ansicht auf den Ordner mit dem gleichen Namen, von deiner Aktion,
Index
in diesem Fall.Sie auch zurückgeben könnte, eine andere Ansicht über die
View
Methode, da Sie die jeweilige Ansicht auf den Ordner, zum Beispiel:Erwägen, diesem Fall haben, sollten Sie eine Ansicht mit dem Namen
About
imProduct
Ordner. Zum Beispiel:~/Views/Product/About.cshtml
.Wenn Sie Ihren Controller zu einem anderen Projekt (Klassenbibliothek), müssen Sie die Einstellung auf der asp.net mvc-Initialisierung was ist der Standard-Namensraum von Ihrem Controller, probieren Sie etwas wie dies auf der
Global.asax
Datei undApplication_Start
Methode:Werfen Sie einen Blick auf diese Artikel: http://dotnetslackers.com/articles/aspnet/storing-asp-net-mvc-controllers-views-in-separate-assemblies.aspx
So, nur
return View();
sollte funktioniert.Es beschwert sich trotzdem, dass es nicht beheben können die Ansicht 'Index'.
wie über die routing? haben Sie etwas ändern?
Das habe ich nicht und vielleicht ist das mein problem? Ursprünglich hatte ich meinen Controller in meinem Web-Projekt, aber ich Sie gelöscht, das Verzeichnis und erstellt ein neues Projekt für meinen Controller. Ich werde zu aktualisieren meinem original-post mit meinen Routen.
InformationsquelleAutor Felipe Oriani