อะไรคือวิธีที่เหมาะสมในการแสดงเทมเพลตลูก
และอะไรคือความแตกต่าง? ทั้งสองดูเหมือนจะทำงานให้ฉัน
และทำไมไม่@Html.RenderPartial()
ทำงานอีกต่อไป?
อะไรคือวิธีที่เหมาะสมในการแสดงเทมเพลตลูก
และอะไรคือความแตกต่าง? ทั้งสองดูเหมือนจะทำงานให้ฉัน
และทำไมไม่@Html.RenderPartial()
ทำงานอีกต่อไป?
คำตอบ:
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)
@Html.Partial("MyView")
เทียบกับ@{Html.RenderPartial("MyView");}
RenderPage
หรือไม่? ฉันต้องการซ้อนหน้าอื่นโดยการระบุพารามิเตอร์การสืบค้นเฉพาะซึ่งจะกรองข้อมูลในหน้านั้นและนอกจากนี้จะลบเค้าโครงของตัวเอง
ฉันชอบ
@RenderPage("_LayoutHeader.cshtml")
เกิน
@{ Html.RenderPartial("_LayoutHeader"); }
เพียงเพราะไวยากรณ์ง่ายกว่าและอ่านง่ายกว่า นอกเหนือจากนั้นดูเหมือนจะไม่มีฟังก์ชันการทำงานที่แตกต่างที่ชาญฉลาด
แก้ไข: ข้อดีอย่างหนึ่งของ RenderPartial คือคุณไม่จำเป็นต้องระบุเส้นทางหรือนามสกุลไฟล์ทั้งหมดซึ่งจะค้นหาสถานที่ทั่วไปโดยอัตโนมัติ
RenderPage
เนื่องจากไวยากรณ์
RenderPartialวิธีไม่กลับ HTML มาร์กอัปชอบมากที่สุดวิธีการช่วยเหลืออื่น ๆ แต่จะเขียนเนื้อหาไปยังสตรีมการตอบกลับโดยตรงด้วยเหตุนี้เราจึงต้องเรียกมันว่าเป็นบรรทัด C # โดยใช้อัฒภาค
สิ่งนี้มีประสิทธิภาพมากกว่าการบัฟเฟอร์ HTML ที่แสดงผลจากมุมมองบางส่วนเล็กน้อยเนื่องจากจะถูกเขียนไปยังสตรีมตอบกลับ หากคุณต้องการไวยากรณ์ที่สอดคล้องกันมากกว่านี้คุณสามารถใช้เมธอดHtml.Partialซึ่งจะเหมือนกับเมธอดRenderPartial ทุกประการแต่จะส่งคืนแฟรกเมนต์ HTML และสามารถใช้เป็น @ Html.Partial ("Product", p)
นอกจากนี้เรายังสามารถส่งผ่านโมเดลโดยใช้มุมมองบางส่วน @ Html.Partial ("MyView", "MyModel");
@RenderPages()
ข้างต้นไม่ทำงานใน ASP.NET MVC ใช้งานได้ในหน้าเว็บเท่านั้น
@Html.Partial("_Footer")
คุณจะต้องใช้ข้างต้นใน ASP.NET MVC