1. RenderBody In de Razor-engine is er geen "masterpagina", in plaats daarvan wordt een pagina genaamd "layout" (_Layout.cshtml) in de gedeelde weergavemap geplaatst. Op deze pagina zie je een verklaring in de tag: @RenderBody() In feite werkt het vergelijkbaar met de servercontrole op de masterpagina: wanneer een weergave gebaseerd op deze layoutpagina wordt aangemaakt, worden de inhoud van de weergave samengevoegd met de layoutpagina, en wordt de inhoud van de nieuw aangemaakte weergave tussen de labels weergegeven via de @RenderBody()-methode van de layoutpagina. Deze methode vereist geen parameters en kan slechts één keer verschijnen. 2. RenderPage Zoals je aan de naam kunt afleiden, is deze methode bedoeld om een pagina te presenteren. Bijvoorbeeld, de vaste header op een webpagina kan apart in een gedeeld weergavebestand worden geplaatst en vervolgens op deze manier worden aangeroepen op de layoutpagina, als volgt: @RenderPage("~/Views/Gedeeld/_Header.cshtml") Met parameters @RenderPage("~/Views/Shared/_Header.cshtml",new{parm="my",parm2="you") Bel de pagina om de parameters te krijgen: Krijg de parameters die door RenderPage() worden doorgegeven. @PageData["param"] 3. Rendersectie De layoutpagina heeft ook het concept van een sectie, dat wil zeggen, als een sectie is gedefinieerd in een weergavesjabloon, kan deze afzonderlijk op de volgende manier worden gepresenteerd: @RenderPage("~/Views/Gedeeld/_Header.cshtml") @RenderBody()
//模板里添加了一个节 @RenderSection ("hoofd") Definieer natuurlijk ook de sectie in de weergave, anders zal er een uitzondering optreden: @section hoofd{
//do
} Om uitzonderingen door ontbrekende secties te voorkomen, kun je RenderSection() een tweede argument geven: @RenderSection("SubMenu", onwaar) of @if (IsSectionDefined("SubMenu"))
{ @RenderSection("SubMenu", onwaar)
} anders
{ <p>SubMenu-sectie is niet gedefinieerd!</p>
}
4.@Html.Partial Partial maakt elke keer zijn eigen instantie van TextWriter aan en cachet de inhoud in het geheugen. Stuur ten slotte alle schrijveroutput naar een MvcString-object Meestal gebruiken we @{ html.RenderPartial("details"); in plaats van @Html. Gedeeltelijk Het verschil tussen RenderPage() en RenderPartial(). RenderPage()-aanroepen kunnen het alleen gebruiken om voorbijgaande data door te geven. RenderPartial() kan viewdata, model en andere data gebruiken. Het verschil tussen Html.RenderPartial en Html.RenderAction Html.RenderPartial is geschikt voor herhaalde UserControls en hoeft alleen te worden gebruikt om inhoud via modellen te renderen, of voor UserControls voor advertenties. Html.RenderAction roept eerst de Controller's Action-methode aan; als deze UserControl gegevens uit de database moet halen om te renderen (de database via de Actie te lezen), is deze methode geschikter voor dit moment. 5.Html.Partial("MyView") Geef een pogingstroom terug als een MvcHtmlString, volgens de standaard routingregels. Rendert de "MyView"-weergave naar een MvcHtmlString. Het volgt de standaardregels voor weergave-opzoeking (d.w.z. controleer de huidige directory, en dan de Gedeelde directory). Html.RenderPartial("MyView")
Vergelijkbaar met Html.Partial() is het verschil dat het direct in de pagina wordt getypt zonder caching. Doet hetzelfde als Html.Partial(), behalve dat het zijn output direct naar de responsstroom schrijft. Dit is efficiënter, omdat de weergave-inhoud niet in het geheugen wordt gebufferd. Omdat de methode echter geen output teruggeeft, werkt @Html.RenderPartial("MyView") niet. Je moet de aanroep in een codeblok verpakken: @{Html.RenderPartial("MyView"); }. RenderPage("MyView.cshtml")
Geeft een speciale weergave terug met paden, bestandsnamen, enzovoort, en levert direct uit zoals Heml.RenderPartial() zonder caching. modelvariabelen kunnen worden doorgegeven. Rendert de gespecificeerde weergave (geïdentificeerd door pad en bestandsnaam in plaats van weergavenaam) direct naar de responsstroom, zoals Html.RenderPartial(). Je kunt elk model dat je wilt aan de view toevoegen door het als tweede parameter op te nemen RenderPage("MyView.cshtml",MyModel)
Ik geef de voorkeur aan
@RenderPage("_LayoutHeader.cshtml")Over @{Html.RenderPartial("_LayoutHeader"); }Alleen omdat de syntaxis makkelijker is en het beter leesbaar is. Verder lijken er geen functionele verschillen te zijn.
|