MVC 中Html.RenderPartial与Html.RenderAction 和 Html.Partial 区别{转}

本文详细介绍了HTML Helper中的三个方法:partial、renderpartial和renderaction的区别与使用场景,帮助开发者更好地在视图中嵌入用户控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

这3个htmlhelper的扩展方法

html.partial:是将视图内容直接生成一个字符串并返回,

html.renderpartial方法是直接输出至当前httpcontext,

而html.renderaction还调用一下action。重新執行一次controller → model → view的順序。

因此它们在视图中的使用方式是不同的:

html.renderpartial("mypartialview");%>

html.renderaction("mypartialview");%>

=html.partial("mypartialview")%> (相当于一个字符串)

注意:renderpartial以renderpartial,renderaction 方法不是返回一个字符串,而是直接输出内容到调用视图模板的输出流中。 方法后使用分号,否则会导致编译器错误。

这是因为代码块是一串代码语句,在c#代码中,需要通过分号标识语句结束。

以下摘自网络:

html.renderpartial与html.renderaction这两个方法都是用来在界面上嵌入用户控件的。

html.renderpartial是直接将用户控件嵌入到界面上:

注意:用第一种方法时,用户控件必须放在调用者同一目录下,也可以放在view/shared中。

html.renderaction则通过controller中的action来调用用户控件

controller:----用户控件所在controller

public actionresult usercontrol()

{

return partialview();

}

view:----调用用户控件的view

html.renderaction的方法;這個方法和partial有點不太一樣,他是直接重新執

行一次controller → model → view的順序,然後把產生的頁面帶回到原來的view中再回傳。

所以html.renderaction中傳遞的參數是執行的controller和action名稱。

01

div id="header">

02

h1>

03

a href="/">asp.net mvc music storea>

04

h1>

05

06

ul id="navlist">

07

li class="first">a href="/" id="current">homea>li>

08

li>a href="/store/">storea>li>

09

li>

10

11

li>

12

li>a href="/storemanager/">admina>li>

13

ul>

14

div>

若是想讓建立的action只能讓renderaction呼叫,可以加上childactiononly屬性,讓他無法被直接呼叫。

01

//

02

// get: /store/genremenu

03

04

[childactiononly]

05

public actionresult genremenu()

06

{

07

var genres = storedb.genres.tolist();

08

09

return view(genres);

10

}

以下是執行的比較圖:

基本上renderpartial()與renderaction()這兩個方法非常相似,都是用來將usercontrol(.ascx)嵌入到網頁上,並且可以讓網頁相同功能的區塊重覆使用,不需要在每個頁面重新寫程式碼,不過renderpartial是直接將ascx檔的程式碼嵌入到aspx網頁上,並不會執行對應的action程式碼,例如我們有一個產品的list頁面:

01

"c#" inherits="system.web.mvc.viewpage>" %>

02

03

...

04

05

06

07

編s號m1

08

產£品~名w稱u

09

版c本d?

10

11

12

foreach (var item in model) { %>

13

14

15

"編s輯e", "editproduct", new { id=item.productid}) %> |

16

"詳mo細o", "productdetail", new {id=item.productid })%>

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

若有許多頁面都需要用到此產品清單的列表,可以抽出來變成usercontrol(例如productlist.ascx),方便我們以後重覆利用,不過現在問題來了,那要使用html.renderpartial還是html.renderaction的方法?這時候會建議使用html.renderpartial,因為對於產品清單來說,我們只是用來呈現ienumerable集合內的productmodel資料,並不需要去執行productlist.ascx的action方法,所以就可以在網頁上使用下面的寫法來嵌入此usercontrol:

1

"product", model.products); %>

2

//或是指定usercontrol的路徑

3

"~/views/product/productlist.ascx", model.products); %>

至於html.renderaction則是會去執行controller裡的action,不過renderaction有提供強行別的方式來呼叫action,例如下面種寫法都是相同的:

1

"productlist", "product"); %>

2

//使用強行別的方式來呼叫action

3

(x => x.productlist()); %>

如果在網頁上使用renderaction的方式來嵌入usercontrol,這時候會先去執行productcontroller的productlist方法,再根據回傳的actionresult來決定要呈現哪個ascx檔,當然也可以在html.renderaction傳入ienumerable的集合物件 結論: html.renderpartial適合用在重覆使用的usercontrol,必且只需要透過model來呈現內容,或是對於廣告的usercontrol也適合使用。 html.renderaction則會先去呼叫controller的action方法,如果此usercontrol是需要透過資料庫取得資料來呈現(透過action來讀取資料庫),此時會比較適合使用此方式。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值