มีดโกน: @ Html.Partial () กับ @RenderPage ()


94

อะไรคือวิธีที่เหมาะสมในการแสดงเทมเพลตลูก

และอะไรคือความแตกต่าง? ทั้งสองดูเหมือนจะทำงานให้ฉัน

และทำไมไม่@Html.RenderPartial()ทำงานอีกต่อไป?

คำตอบ:


128
Html.Partial("MyView")

แสดงมุมมอง "MyView" เป็นMvcHtmlStringไฟล์. เป็นไปตามกฎมาตรฐานสำหรับการค้นหามุมมอง (เช่นตรวจสอบไดเร็กทอรีปัจจุบันจากนั้นตรวจสอบSharedไดเร็กทอรี)

Html.RenderPartial("MyView")

ทำเช่นเดียวกับHtml.Partial()ยกเว้นว่าจะเขียนเอาต์พุตไปยังสตรีมการตอบสนองโดยตรง สิ่งนี้มีประสิทธิภาพมากขึ้นเนื่องจากเนื้อหามุมมองไม่ได้ถูกบัฟเฟอร์ในหน่วยความจำ อย่างไรก็ตามเนื่องจากวิธีการไม่ส่งคืนผลลัพธ์ใด ๆ@Html.RenderPartial("MyView")จะไม่ทำงาน @{Html.RenderPartial("MyView");}คุณจะต้องตัดการโทรในการป้องกันรหัสแทน:

RenderPage("MyView.cshtml")

วาทกรรมมุมมองที่ระบุ (ระบุเส้นทางและชื่อแฟ้มมากกว่าโดยชื่อดู) Html.RenderPartial()โดยตรงกับกระแสการตอบสนองเช่น คุณสามารถจัดหาโมเดลใดก็ได้ที่คุณต้องการให้กับมุมมองโดยรวมเป็นพารามิเตอร์ที่สอง

RenderPage("MyView.cshtml", MyModel)

8
มีเมตริกใด ๆ เกี่ยวกับการเพิ่มประสิทธิภาพของ @ {Html.RenderPartial ("MyView");} มากกว่า @ Html.RenderPartial ("MyView") หรือไม่
Faust

@ Faust คุณหมายถึง Partial vd RenderPartial หรือไม่?
Cacho Santa

1
@cacho: ใช่ความคิดเห็นของฉันควรอ่าน@Html.Partial("MyView")เทียบกับ@{Html.RenderPartial("MyView");}
เฟาสต์

2
การแก้ไขเล็กน้อย: พารามิเตอร์ที่สองใน RenderPage () ไม่ใช่โมเดล แต่เป็นพารามิเตอร์ [] Object ที่เข้าถึงผ่านคุณสมบัติ PageData ดูเหมือนว่าจะใช้งานได้ดังที่กล่าวมาเนื่องจากโดยค่าเริ่มต้นโมเดลจากเพจ "พาเรนต์" จะถูกส่งผ่านไปยัง "ลูก" msdn.microsoft.com/en-us/library/…
จอน

มีวิธีซ้อนหน้าที่สมบูรณ์ตามแบบจำลองโดยการโทรRenderPageหรือไม่? ฉันต้องการซ้อนหน้าอื่นโดยการระบุพารามิเตอร์การสืบค้นเฉพาะซึ่งจะกรองข้อมูลในหน้านั้นและนอกจากนี้จะลบเค้าโครงของตัวเอง
Shimmy Weitzhandler

17

ฉันชอบ

@RenderPage("_LayoutHeader.cshtml")

เกิน

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

เพียงเพราะไวยากรณ์ง่ายกว่าและอ่านง่ายกว่า นอกเหนือจากนั้นดูเหมือนจะไม่มีฟังก์ชันการทำงานที่แตกต่างที่ชาญฉลาด

แก้ไข: ข้อดีอย่างหนึ่งของ RenderPartial คือคุณไม่จำเป็นต้องระบุเส้นทางหรือนามสกุลไฟล์ทั้งหมดซึ่งจะค้นหาสถานที่ทั่วไปโดยอัตโนมัติ


1
ฉันคิดว่านี่ควรเป็นความคิดเห็นที่ไม่ตอบโจทย์ นอกจากนี้ฉันเห็นด้วยRenderPageเนื่องจากไวยากรณ์
Iman Mahmoudinasab

6

RenderPartialวิธีไม่กลับ HTML มาร์กอัปชอบมากที่สุดวิธีการช่วยเหลืออื่น ๆ แต่จะเขียนเนื้อหาไปยังสตรีมการตอบกลับโดยตรงด้วยเหตุนี้เราจึงต้องเรียกมันว่าเป็นบรรทัด C # โดยใช้อัฒภาค

สิ่งนี้มีประสิทธิภาพมากกว่าการบัฟเฟอร์ HTML ที่แสดงผลจากมุมมองบางส่วนเล็กน้อยเนื่องจากจะถูกเขียนไปยังสตรีมตอบกลับ หากคุณต้องการไวยากรณ์ที่สอดคล้องกันมากกว่านี้คุณสามารถใช้เมธอดHtml.Partialซึ่งจะเหมือนกับเมธอดRenderPartial ทุกประการแต่จะส่งคืนแฟรกเมนต์ HTML และสามารถใช้เป็น @ Html.Partial ("Product", p)


2

นอกจากนี้เรายังสามารถส่งผ่านโมเดลโดยใช้มุมมองบางส่วน @ Html.Partial ("MyView", "MyModel");


0
@RenderPages() 

ข้างต้นไม่ทำงานใน ASP.NET MVC ใช้งานได้ในหน้าเว็บเท่านั้น

@Html.Partial("_Footer")

คุณจะต้องใช้ข้างต้นใน ASP.NET MVC

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.