Html.RenderPartial gibt mir seltsame Überlastungsfehler?

103

Ich habe eine Testteilseite mit dem Namen _Test.cshtml erstellt und sie in dasselbe Verzeichnis wie meine Ansicht gestellt, in der sie aufgerufen wird. Hier ist sie:

<div>hi</div>

Und in der aufrufenden cshtml-Ansicht habe ich einfach Folgendes eingefügt:

@Html.RenderPartial("_Test")

Was mir den Fehler gibt:

CS1502: Die beste überladene Methodenübereinstimmung für 'System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)' enthält einige ungültige Argumente

Ich habe auch den vollständigen Pfad mit dem gleichen Ergebnis versucht.

Ich bin sehr verwirrt darüber, warum sich das so verhält. Ich gehe davon aus, dass mir etwas Einfaches fehlt.

naspinski
quelle

Antworten:

190

Sie erhalten diesen Fehler, weil Html.RenderXXXHelfer ungültig zurückkehren - sie haben nichts zurückzugeben, weil sie Dinge direkt * auf die Antwort schreiben. Sie sollten sie wie folgt verwenden:

@{ Html.RenderPartial("_Test"); }

Es gibt auch einen Html.Partial-Helfer, der mit Ihrer Syntax funktioniert. Ich würde ihn jedoch aufgrund der Leistung nur empfehlen, wenn Sie dies tun müssen (er setzt zuerst eine bestimmte Teilansicht in eine Zeichenfolge zusammen und die übergeordnete Ansicht setzt sie dann in Antwort * ).

* Dies ist nicht ganz richtig. Sie werden tatsächlich in ViewContext.Writer gerendert. Sobald die gesamte Seite gerendert und zusammengesetzt ist, wird das Ganze beantwortet

Lukáš Novotný
quelle