Forum: PC-Programmierung [ASP.NET]View einer anderen Control anzeigen


von Matthias S. (da_user)


Lesenswert?

Hi,

ich steige derzeit etwas ein in das Thema ASP.NET Core 2.0 MVC, mal ein 
bisschen reintasten. Habe ein Videotutorial (Leider noch für Core 1.0) 
dazu gefunden, welches jetzt für den Einstieg ganz praktisch war. Nun 
habe ich eine Webandwendung mit zwei Controllern gebaut.

Nehmen wir mal an, im Projektverzeichnis gibts damit entsprechend:
1
/Controllers/HomeController.cs
2
/Controllers/andereSeiteController.cs
3
/Views/Home/Index.cshtml
4
/Views/andereSeite/Index.cshtml
Beide Views lassen sich bei entsprechender Adresseingabe einwandfrei 
aufrufen. Nun würde ich auf der Home-Seite (Views/Home/Index) gerne 
einen Link unterbringen, der mir dann die Views/andereSeite/Index lädt.
Entsprechend habe ich in der Views/Home/Index einen Link untergebracht:
----------
Leider kann ich dieses HTML-Zeile nicht zitieren, da mir das Forum hier 
Spam erkennt, ich taste mich mal ran:
1
asp-action="AndereSeite">Andere Seite
Ich habe jetzt den ersten Teil des öffenden a-Tags und das komplette 
schließende a-Tag für die Forensoftware weggelassen.
----------

und im Home-Controller (/Controllers/HomeController.cs) eine passende 
Methode:
1
         // GET: Home/andereSeite
2
        public IActionResult andereSeite()
3
        {
4
            return View("Views/andereSeite/Index.cshtml");
5
        }
Wie man sieht, bin ich zumindest schonmal so weit gekommen, dass ich die 
andere View vom AppVerzeichniss aus, inkl. der Erweiterung angeben muss. 
Ich zitiere dazu MS:

> Wenn einen absoluten Pfad, angefangen beim Stamm app verwenden
> (optional beginnend mit "/" oder "~ /"), wird die cshtml
> Erweiterung muss angegeben werden:

https://docs.microsoft.com/de-de/aspnet/core/mvc/views/overview

Dadurch erhalte ich immerhin keinen The View 'xyz' was not found. Fehler 
mehr. Dafür eine NullRefernceException:

> NullReferenceException: Object reference not set to an
> instance of an object.
>
> AspNetCore._Views_andereSeite_Index_cshtml+<ExecuteAsync>
> d__8.MoveNext() in Index.cshtml, line 27

Also wird offensichtlich der Controller für diese View nicht 
instanziert. Wie kriege ich denn den vernünftig(!) gestartet? Der Weg, 
den jetzt aus der angesprochenen Methode im Home-Controller heraus zu 
instanzieren, und dann irgendwie der anderen View mit zugeben, hört sich 
für mich so absurd und Falsch an, dass ich da gar nicht experimentieren 
will.

von Dieter (Gast)


Lesenswert?

Matthias S. schrieb:
> ich steige derzeit etwas ein in das Thema ASP.NET Core 2.0 MVC, mal ein
> bisschen reintasten.

Tu dir selbst einen gefallen und such dir was richtiges. Jetzt am Anfang 
geht das noch leicht.

von Roger S. (edge)


Lesenswert?

In der view mittels:
1
@Url.Action("Index", "andereSeite")

oder
1
@Html.Action("Index", "andereSeite");

Als controller action:
1
return RedirectToAction("Index", "andereSeite");

Cheers, Roger

von Matthias S. (da_user)


Lesenswert?

Funktioniert!
Dankeschön!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.