Ich habe mich gefragt, was, wenn es möglich ist, der beste Weg ist, einen Teil mit der neuen Razor View Engine zu rendern. Ich verstehe, dass dies zu diesem Zeitpunkt noch nicht vollständig abgeschlossen war
Im Moment verwende ich RenderPage, um das Benutzersteuerelement zu rendern:
@RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model)
Die Seite, die RenderPage aufruft, verwendet eine Layoutseite (Masterseite) mit drei definierten Abschnitten: TitleContent, HeadContent und Maincontent. Wenn ich versuche, mein Gebietsschemasteuerelement von dieser Seite aus zu rendern, werden diese Abschnitte anscheinend ebenfalls benötigt - sie sollten nur auf der aufrufenden Seite erforderlich sein und vorhanden sein. Ich erhalte die folgende Meldung, unabhängig davon, ob ich die Abschnitte in meine Teilansicht einbeziehe oder nicht (natürlich möchte ich diese Abschnitte nicht einschließen, aber es schien ein interessanter Debugging-Punkt zu sein ...).
Die folgenden Abschnitte wurden definiert, aber nicht auf der Layoutseite '~ / Views / Shared / LocaleUserControl.cshtml' gerendert: TitleContent; Hauptinhalt; Hauptinhalt
Meine Teilansicht lautet wie folgt (angepasst über den folgenden Link ):
@inherits System.Web.Mvc.WebViewPage<LocaleBaseModel>
@using System.Web.UI;
<p>
@Html.LabelFor(model => Model.CountryName)
<br />
@Html.DropDownListFor(model => Model.CountryName,null, string.Empty, new { @class = "text", accesskey="u"})
</p>
<p>
@Html.LabelFor(model => Model.StateProvince)
<br />
@Html.DropDownListFor(model => Model.StateProvince, null, string.Empty, new { @class = "text", accesskey="t" })
</p>
<script type="text/javascript">
$(function () {
var countries = $("#CountryName");
var statesprovinces = $("#StateProvince");
countries.change(function () {
statesprovinces.find('option').remove();
var url = '@Url.Action("GetStatesProvinces", "Base")';
$.getJSON(url, { countryId: countries.val() }, function (data) {
$(data).each(function () {
$("<option value=" + this.ID + ">" + this.Name + "</option>").appendTo(statesprovinces);
});
});
});
});
</script>
quelle
_Layout.cshtml
Datei in demShared
Ordner und Kasse , wie die Einbeziehung_LogOnPartial.cshtml
welche stammt ausWebViewPage
erfolgt (mit Html.Partial). Also nein, der Teil muss nicht vonViewPage
oderViewUserControl
überhaupt nicht abgeleitet werden, umHtml.Partial
zu arbeiten.Html.RenderPartial
mit der ASPX-Seite gearbeitet, die void zurückgibt.Html.Partial
gibt ein zurückMvcHtmlString
. Wenn Ihr Teil also viele Markups enthält, erstellen Sie ein möglicherweise sehr großes Zeichenfolgenobjekt, um es sofort zu GCen. Gibt es einen Ansatz, der das direkte Rendern in die Ausgabe mit Razor unterstützt?@{...}
Block sollte funktionieren. Keine Ahnung, ob es eine bessere Lösung gibt.Wenn Sie keinen Code duplizieren möchten und wie ich nur Statistiken anzeigen möchten, können Sie in Ihrem Ansichtsmodell einfach die Modelle übergeben, von denen Sie Daten abrufen möchten:
Führen Sie dann in Ihrem Controller einfach Ihre Abfragen für die jeweiligen Modelle aus, übergeben Sie sie an das Ansichtsmodell und geben Sie sie zurück. Beispiel:
[Code, um zu überprüfen, ob Ergebnisse]
Wie ich bereits sagte, sollten Sie dies nur dann wirklich tun, wenn Sie Statistiken aus den relevanten Tabellen anzeigen möchten und aus Sicherheitsgründen, die andere oben erwähnt haben, kein anderer Teil des CRUD-Prozesses stattfindet.
quelle