Razor: @ Html.Partial () vs @RenderPage ()


94

Alt şablonu oluşturmanın uygun yolu nedir?

Ve fark nedir? İkisi de benim için çalışıyor gibi görünüyor.

Ve neden @Html.RenderPartial()artık çalışmıyor?

Yanıtlar:


128
Html.Partial("MyView")

"MyView" görünümünü bir MvcHtmlString. Görünüm araması için standart kuralları izler (yani mevcut dizini kontrol edin, ardından Shareddizini kontrol edin ).

Html.RenderPartial("MyView")

Çıktısını Html.Partial()doğrudan yanıt akışına yazması dışında aynı şeyi yapar . Bu daha etkilidir, çünkü görüntüleme içeriği hafızaya alınmaz. Ancak, yöntem herhangi bir çıktı döndürmediğinden @Html.RenderPartial("MyView")çalışmayacaktır. Onun yerine bir kod bloğu içinde çağrıyı kaydırmak zorunda: @{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")

Belirtilen görünümü (görünüm adı yerine yol ve dosya adıyla tanımlanan) doğrudan yanıt akışına, örneğin Html.RenderPartial(). Görünüme istediğiniz modeli ikinci bir parametre olarak ekleyerek tedarik edebilirsiniz.

RenderPage("MyView.cshtml", MyModel)

8
@ Html.RenderPartial ("MyView") üzerinden @ {Html.RenderPartial ("MyView");} verimlilik kazancıyla ilgili herhangi bir ölçüm var mı?
Faust

@Faust Kısmi vd RenderPartial mı demek istediniz?
Cacho Santa

1
@cacho: evet, benim yorum okumalısınız @Html.Partial("MyView")vs@{Html.RenderPartial("MyView");}
Faust

2
Küçük düzeltme: RenderPage () 'deki ikinci parametre model değil, PageData özelliği aracılığıyla erişilen bir param [] Nesnesidir. Yukarıdaki gibi çalışıyor gibi görünüyor, çünkü varsayılan olarak "üst" sayfadaki model "alt" sayfaya aktarılıyor. msdn.microsoft.com/en-us/library/…
Jon

Tam bir sayfayı arayarak modeli boyunca yerleştirmenin bir yolu var mı RenderPage? Belirli bir sorgu parametresi belirterek farklı bir sayfayı iç içe yerleştirmek istiyorum, bu da o sayfadaki verileri filtreleyecek ve ayrıca kendi düzenini kaldıracak.
Shimmy Weitzhandler

17

tercih ederim

@RenderPage("_LayoutHeader.cshtml")

Bitmiş

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

Sadece sözdizimi daha kolay ve daha okunaklı olduğu için. Bunun dışında işlevsellik açısından herhangi bir farklılık görünmüyor.

DÜZENLEME: RenderPartial'ın bir avantajı, tüm yolu veya dosya uzantısını belirtmenize gerek olmamasıdır, ortak yerleri otomatik olarak arayacaktır.


1
Bence bu cevap değil bir yorum olmalı. Ayrıca RenderPagesözdizimi nedeniyle de katılıyorum .
Iman Mahmoudinasab

6

RenderPartial yöntem diğer birçok yardımcı yöntemler gibi HTML biçimlendirme döndürmez. Bunun yerine, içeriği doğrudan yanıt akışına yazar, bu yüzden onu noktalı virgül kullanarak tam bir C # satırı olarak adlandırmalıyız.

Bu, oluşturulan HTML'yi kısmi görünümden arabelleğe almaktan biraz daha etkilidir, çünkü yine de yanıt akışına yazılacaktır. Daha tutarlı bir sözdizimi tercih ederseniz , RenderPartial yöntemiyle tam olarak aynı olan , ancak bir HTML parçası döndüren ve @ Html.Partial ("Ürün", p) olarak kullanılabilen Html.Partial yöntemini kullanabilirsiniz .


2

Modeli kısmi görünümler kullanarak da geçebiliriz. @ Html.Partial ("MyView", "MyModel");


0
@RenderPages() 

Yukarıdakiler ASP.NET MVC'de çalışmaz. Yalnızca Web Sayfalarında çalışır.

@Html.Partial("_Footer")

Yukarıdakileri ASP.NET MVC'de kullanmanız gerekecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.