Html.RenderPartial () ไวยากรณ์ด้วย Razor


95

ใช้งานได้เนื่องจากส่งคืนผลลัพธ์ของการแสดงผลมุมมองบางส่วนในสตริง:

@Html.Partial("Path/to/my/partial/view")

แต่ฉันชอบใช้RenderPartialและดูเหมือนว่าฉันต้องเขียน:

@{Html.RenderPartial("Path/to/my/partial/view");}

แทน:

@Html.RenderPartial("Path/to/my/partial/view");

เพื่อให้มันใช้งานได้ ข้อความผิดพลาด:

 Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments

หากมีวิธีใดที่ดีกว่าแทนที่จะเปิดบล็อกรหัส@{...}สำหรับการเรียกวิธีเดียว?


อะไรคือข้อผิดพลาดที่คุณได้รับเมื่อพยายามใช้@Html.RenderPartial()
Neil Knight

ฉันได้เพิ่มข้อความในโพสต์ของฉันแล้ว ฉันเข้าใจว่าเหตุใดจึงแสดงข้อผิดพลาด @ Html.RenderPartial () ถูกแยกวิเคราะห์โดยประมาณเป็น <%?: @ html.RenderPartial ()?> ซึ่งผิดและไม่เป็น <? Html.RenderPartial (); ?> แต่ฉันกำลังมองหาวิธีแก้ปัญหา
artvolk

ที่เกี่ยวข้อง: Html.Partial VS Html.RenderPartial & Html.Action VS Html.RenderAction BTW ทำไมคุณถึงชอบใช้RenderPartial?
Paolo Moretti

คำตอบ:


142
  • RenderPartial()เป็นวิธีโมฆะที่เขียนไปยังสตรีมตอบกลับ วิธีการเป็นโมฆะใน C #, ความต้องการและด้วยเหตุนี้จะต้องถูกล้อมรอบด้วย;{ }

  • Partial()เป็นวิธีการที่ส่งกลับMvcHtmlString ใน Razor คุณสามารถเรียกคุณสมบัติหรือวิธีการที่ส่งคืนสตริงดังกล่าวโดยมีเพียง@คำนำหน้าเพื่อแยกความแตกต่างจาก HTML ธรรมดาที่คุณมีบนเพจ


1
ทำไมคุณถึงชอบใช้ Html.RenderPartial แทน Html.Partial หากคุณต้องการ / จำเป็นต้องไปกับ Html.RenderPartial ด้วยเหตุผลบางประการไม่มีวิธีแก้ปัญหานั่นคือไวยากรณ์
Ofer Zelig

5
ฉันใช้มันเพราะมันน่าจะมีประสิทธิภาพมากกว่า (เพราะมันไม่ส่งคืนสตริงขนาดใหญ่)
artvolk

45

Html.RenderPartial () เป็นเมธอดโมฆะ - คุณสามารถตรวจสอบว่าเมธอดนั้นเป็นเมธอดโมฆะหรือไม่โดยวางเมาส์เหนือการเรียก RenderPartial ในโค้ดของคุณและคุณจะเห็นข้อความ (ส่วนขยาย) เป็นโมฆะ HtmlHelper.RenderPartial ...

วิธีการโมฆะจำเป็นต้องมีเครื่องหมายอัฒภาคที่ส่วนท้ายของรหัสการเรียก

ในเอ็นจิ้นมุมมอง Webforms คุณจะต้องห่อหุ้มการเรียก Html.RenderPartial () ของคุณไว้ภายในผึ้งต่อย <%%>

เช่นนั้น

<% Html.RenderPartial("Path/to/my/partial/view"); %>

เมื่อคุณใช้เอ็นจินมุมมองมีดโกนสิ่งที่เทียบเท่าคือ

@{Html.RenderPartial("Path/to/my/partial/view");}

5
"ผึ้งต่อย" - นั่นเป็นครั้งแรก (สำหรับฉัน?)
JoeBrockhaus

9
@Html.Partial("NameOfPartialView")

ฉันต้องการใช้Html.RenderPartial()นั่นคือเหตุผลที่ฉันถามคำถามนี้ รายละเอียด: "ประสิทธิภาพที่ชาญฉลาดมีการอ้างว่าการแสดงผลโดยตรงไปยังสตรีมเอาต์พุตนั้นดีกว่า (ซึ่งเป็นสาเหตุที่ทำให้ RenderPartial เป็นโมฆะเริ่มต้นด้วย)" จากที่นี่stackoverflow.com/a/2729851/118810
artvolk

0

หากคุณได้รับรูปแบบนี้มันจะเหมือนกับลิงก์ไปยังเพจอื่นหรือลิงค์อื่นมุมมองบางส่วนที่ใช้สำหรับการแสดงผลไฟล์ html จากที่หนึ่งไปยังอีกที่หนึ่ง

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