Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 區別和用法


Partial 和RenderPartial:
這兩個的性質都是一樣, 只指把一個個View給鑲入進來, 只是回傳值有點不一樣
Partial 回傳的一個Object (MvcHtmlString), 回傳一個String 把一堆Html給回傳出來, 然后寫進到主頁面上

@Html.Partial("ViewName")

RenderPartial 回傳的是void, 而這個方法會在主頁面上添加指定的View

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

這兩個方法沒有用到Controller, 是直接把一個View(Page) 給加進來
而RenderAction 有點不一樣, 這是一個Action, 所以會用到Controller 之后再回傳一個頁面

public class ChildActionOnlyTestController : Controller

{

  [ChildActionOnly]

  public ActionResult GetSupplierList()

  {

    var controller = new SupplierController();

    return controller.SupplierList();

  }

}

 

RenderPartial和RenderAction兩者的相同點

通常都被用來顯示一個功能相對獨立的“塊”,比如說顯示菜單或者導航條。 兩者輸出的結果都被作為調用的View的一部分顯示。

兩者的不同點

  1. RenderPatial的數據來自於調用的View,而RenderAction來自自己。
  2. RenderAction會發起一個新的Request,而RenderPatial不會。

 

 

@Html.Partial/@{Htmt.RenderPartial()}
@Html.Partial用於將分部視圖渲染為字符串
@{Html.RenderPartial}將分布視圖直接寫入響應輸出流,所以只能直接放在代碼塊中,不能放在表達式中(返回值是void)
 
RenderPartial因為是直接寫在響應流中,所以性能會更好(微量影響),而Partial不用寫在代碼塊中,所以更方便
 
@Html.Action()/@Html.RenderAction()
和Partial與RenderPartial類似,但是因為會通過Action,所以更靈活,可以利用控制器上下文。
在Action中可以通過IsChildAction來判斷是被Url直接調用還是被Action()/RenderAction()調用
可以利用重載直接參數給Action。
RenderAction優先使用ActionNameAttribute。
Action中使用return PartialView()指定分部視圖,在_ViewStatrt.cshtml中指定的Layout會無效。
 
4種PartialView對比:
PartialView:
<div>Just a PartialView Test!@ViewBag.Test</div>
@ViewBag.Test

 

View:
<p>
    @{Html.RenderPartial("ViewUserControl1");}
    @Html.Partial("ViewUserControl1")
    @{Html.RenderAction("ViewUserControl1");}
    @Html.Action("ViewUserControl1")
</p>

 

Controller:
Controller:
[ChildActionOnly]//防止直接調用
public ActionResult ViewUserControl1()
{
    ViewBag.Test = "(Action)調用";
    return PartialView();
}

 

        效果:
    

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM