TL; DR Sind "Teilseiten" in ASP.NET Core 2.0 möglich? Wenn ja, warum erhalte ich den unten beschriebenen Fehler?Teilseiten in ASP.NET Core 2.0
Ich habe mit der neuen Funktion Razor Page von ASP.NET 2.0 und Probleme mit Partials. Die oben verlinkte Dokumentation bezieht sich auf "Partials" an mehreren Stellen, aber nur so weit, mystische Dinge zu sagen wie "Die Layouts, Vorlagen und Partials, die Sie mit MVC-Controllern und konventionellen Razor Views verwenden funktionieren einfach." Meinten sie partial Views, wie wir es gewohnt sind, oder eine neue Art von Teil-Seite auch? Sie zeigen, dass Dateien mit dem herkömmlichen Partial
Suffix im Namen in den Ordner Pages/
platziert werden können, aber die Dateien, die sie erwähnen (z. B. _ValidationScriptsPartial.cshtml
) haben nicht die @page
Deklaration. Wenn „Teil Pages“ in der Tat eine neue Sache ist, dann würde ich das folgende Minimalszenario erwarten zu arbeiten:
eine Auslagerungsdatei
Derp.cshtml
genannt:@page @namespace MyApp.Pages @model DerpModel <p>Member 1: @Model.Member1</p> <p>Member 2: @Model.Member2</p>
Eine Klassendatei
Derp.cshtml.cs
in dem genannten Verzeichnis (unter dem ersten in VS 2017 Solution Explorer verschachtelt), die folgende Klasse enthält:namespace MyApp.Pages { public class DerpModel : PageModel { public void OnGet() { Member1 = "Derp Member1"; Member2 = "Derp Member2"; } public string Member1 { get; set; } public string Member2 { get; set; } } }
Ein zweiter P Alte Datei
DerpWrapper.cshtml
im selben Verzeichnis mit dem Namen, mit dem folgenden Code:@page "{id}" @namespace MyApp.Pages @model DerpModel <p>Outer Member 1: @Model.Member1</p> <p>Outer Member 2: @Model.Member2</p> @Html.Partial("Derp", Model)
Und natürlich eine
_ViewImports
-Datei, die@namespace MyApp.Pages
Hinweis erklärt, dass beide Razor Seiten haben den gleichen @model
Typen und Die zweite Seite schließt im Grunde die erste mit einem Anruf an Html.Partial()
und übergibt ihre Model
. Dies sollte alles ziemlich Standard-Zeug sein, aber beim Navigieren zu http://localhost:xxx/DerpWrapper
, bekomme ich eine 500 Antwort aufgrund einer NullReferenceException mit dem folgenden Stack-Trace.
MyApp.Pages.Derp_Page.get_Model()
MyApp.Pages.Derp_Page+<ExecuteAsync>d__0.MoveNext() in Derp.cshtml
+
<p>Inner Member1: @Model.Member1</p>
...
MyApp.Pages.DerpWrapper_Page+<ExecuteAsync>d__0.MoveNext() in DerpWrapper.cshtml
+
@Html.Partial("Derp", Model)
...
Warum wird die "Wrapper" Model
Seite gleich null? Gibt es keine Möglichkeit, eine Rasiererseite zu definieren und sie von einer anderen Seite oder Ansicht mit Html.Partial()
anzuzeigen?
Ich bin nicht wirklich vertraut mit ASP.NET Core, aber bewirkt die neue '@ page' Direktive nicht, dass eine Seite sich wie eine Aktion verhält? Das würde bedeuten, dass * eine Kinderaktion verwendet werden muss, um sie einzubetten. Teilweise, aber wer weiß. Wie auch immer, ** Ich würde nur versuchen, die '@ Seite' aus der partiellen Derp.cshtml ** zu entfernen. – AaronLS
Rasiererseiten-Teiltöne sind hier beschrieben https://www.learnrazorpages.com/razor-pages/partials-pages auslassen @page der Teil würde die Nullrefex lösen – vip32