永发信息网

如何选择Html.RenderPartial和Html.RenderAction

答案:1  悬赏:30  手机版
解决时间 2021-02-07 03:13
如何选择Html.RenderPartial和Html.RenderAction
最佳答案
Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的。

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

<%Html.RenderPartial("LogOnUserControl");%>



<%Html.RenderPartial("~/Areas/Comm/Views/Shared/LogOnUserControl.ascx");%>

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

Html.RenderAction则通过Controller中的Action来调用用户控件

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

public ActionResult UserControl() {
return PartialView(); }

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

<%Html.RenderAction("UserControl","Controller");%>

RenderPartial和RenderAction都是在Asp.net
Mvc中用来显示PartialView的方法,所以在什么时候用哪个方法就是碰到的第一个问题。而要做出正确的选择就需要对这两个都有充分的了解,并且
知道其异同点。这也是本文的主题。

What
is Html.RenderPartial

Html.RenderPartial在Asp.net
Mvc中是用来调用PartialView的。PartialView基本上就是Asp.net
Webform中的UserControl。调用也很简单,只要在View中把PartialView的名字作为参数传递就可以。比如:

<% Html.RenderPartial("YourPartialView", YourData);
%>

YourData是一个可选的参数。如果有,那么YourData会被赋给PartialView中的Model。如果没有,那么调用
RenderPartial的View中的Mode和ViewData会被传递给PartialView。也就是说,PartialView的数据来自于
调用的View。

What
is Html.RenderAction

Html.RenderAction允许你直接调用某一个Action,并把返回的结果直接显示在当前调用的View中。比如:

<% Html.RenderAction("Show", "Tag");
%>

此时,TagController中的Show方法会被调用。由于这时调用的是一个Action方法,因此可以在此方法中完成你想要完成的各种操作,比如从数据库,文件等获取数据,写数据等并返回结果。

[OutputCache(Duration=6000)]

public ActionResult
Show()

{

var tagData
= null;

//Get data
from database

//tagData =
tagService.AllHot();

return PartialView("TagCloud",
tagData);

}

TagCloud是一个简单的PartialView文件而已。

两者的相同点

RenderPartial和RenderAction通常都被用来显示一个功能相对独立的“块”,比如说显示菜单或者导航条。
两者输出的结果都被作为调用的View的一部分显示。

两者的不同点

RenderPatial的数据来自于调用的View,而RenderAction来自自己。

RenderAction会发起一个新的Request,而RenderPatial不会。

如何选择

根据两者不同点中的第二点,由于RenderAction会调用一个新的Action方法,而Asp.net
Mvc中Action是最小的缓存单位,因此如果某一个“块”的数据比较固定,不会因为访问者的不同而发生变化,那么这时就是使用 RenderAction的时候了。
题外话,对于RenderAction会发起一个新的Request,感觉对调用页面的流程有点破坏。一个View在显示的时候,自己又发起一个
Request去获取数据来显示,显然有点破坏了作为一个View的原则:

A View
should only know how to render, but not what to render!

结束了, This is all.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
诗句家家乞巧望秋月,穿尽红丝几万条是什么意
易水方儿童美术地址在什么地方,想过去办事
宝马七系出开眼角大灯了,但是那个灯是激光灯
北京电卡,夜里在哪里可以充值?
乐宝袋的信用分可以提高吗有什么技巧吗
男子痣相图解
奇纳巴克少儿围棋培训中心地址在哪,我要去那
天下三奕剑孩子怎么弄
6代凯美瑞开车过坑后面怎么咚咚的响什么原因
蓟县龙门小筑药王院地址有知道的么?有点事想
十五忘了烧香,十六在补回行吗
闫氏秘制凤爪在哪里啊,我有事要去这个地方
热血江湖12.0版本什么时候在出龙枭战袍PF
童悦少儿舞蹈艺术培训机构(天通苑校区)怎么去
【cm是厘米还是毫米】mm是厘米还是毫米
推荐资讯
健身我停了两个月感觉身体脂肪率高了,今天做
大地幼儿园(江门蓬江区)地址好找么,我有些事
请问有没有能在线看原版日本漫画的网站?
某市规定如下用水收费标准:每户每月的用水量
一个数,在100-200之间,并且比17的倍数多5.这
北京吴成虹开锁店地址有知道的么?有点事想过
向家湾地址在哪,我要去那里办事
羊永派出所地址好找么,我有些事要过去
大冶新金鑫宾馆地址在什么地方,想过去办事
有什么好的小说 要玄幻的 要主角是重生在魔兽
合顺兴饭店地址在哪,我要去那里办事
迎宾打字复印店地址有知道的么?有点事想过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?