@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 .(转)
mvc renderaction renderpartial 杂谈
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
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,而RenderPatial来自自己。
- 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!
ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
对这四个的区别做一个总结,清理一下思路,方便以后使用:
1、带有Render的方法 @Html.Partial 对应 @{Html.RenderPartial(....);}
@Html.Action 对应 @{Html.RenderAction(....);}2、Action、RenderAction加载方法的视图,执行Controller → Model → View的顺序,然后把产生的页面带回到原来的View中再回传。而Partial、RenderPartial直接加载视图文件内容,执行3. Html.Partial可以直接提供用户控件名作为参数,而Html.Action需要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。
4、对于简单的没有任何逻辑的用户控件,推荐使用Html.Partial;对于需要设置一些Model的用户控件,推荐使用Html.Action。当然,有Model数据也是可以使用Html.Partial方法的,可以看方法的重载。
5、使用Html.Action有个好处,就是可以根据不同的场景选择不同的用户控件。比如:
@Html.Action("UserInfoControl")
在对应的UserInfoControl这个Action中,在用户未登录的时候,可以retun PartialView("LogOnUserControl");登录后,可以retun PartialView("UserInfoControl");这3个HtmlHelper的扩展方法
Html.Partial:是将视图内容直接生成一个字符串并返回,
Html.RenderPartial方法是直接输出至当前HttpContext,
而Html.RenderAction还调用一下Action。重新执行一次Controller → Model → View的顺序。
因此它们在视图中的使用方式是不同的:
<%Html.RenderPartial("MyPartialView");%>
<%Html.RenderAction("MyPartialView");%>
<%=Html.Partial("MyPartialView")%> (相当于一个字符串)
注意:RenderPartial以<%开头,末尾有分号。而Partial,RenderAction以<%=开头,末尾没有分号。这里RenderPartial,RenderAction 方法不是返回一个字符串,而是直接输出内容到调用视图模板的输出流中。 方法后使用分号,否则会导致编译器错误。这是因为<% %>代码块是一串代码语句,在C#代码中,需要通过分号标识语句结束。
@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 .(转)相关推荐
- MVC中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. 1. Html.RenderPartial是直接将用户控件嵌入到界面上: <% ...
- 转载ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
对这四个的区别做一个总结,清理一下思路,方便以后使用: 1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用: @Ht ...
- @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
1.带有Render的方法返回值是void,在方法内部进行输出: 不带的返回值类型为MvcHtmlString,所以只能这样使用: @Html.Partial 对应 @{Html.RenderPart ...
- RenderPartial和RenderAction区别
本篇参考了 Shailendra Chauhan和 Jag Reehal的博文. RenderParital和RenderAction的共同点: ※ 都能返回部分视图 ※ 返回的部分视图和主视图共用一 ...
- Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法【转发】
Html.partial和RenderPartial的用法与区别 Html.partial和RenderPartial都是输出html片段,区别在于 Partial是将视图内容直接生成一个字符串并返回 ...
- Asp.netMVC中Html.Partial,RenderPartial,Action,RenderAction区别和用法
https://www.2cto.com/kf/201702/602449.html Partial 和RenderPartial: 这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传 ...
- Partial RenderPartial Action RenderAction 区别和用法
为什么80%的码农都做不了架构师?>>> 区别: 1.Partial 与 RenderPartial 两个方法性质基本一样,只是把一个静态用户控件给嵌入进来. 2.Partia ...
- MVC中Html.Partial, RenderPartial, Action,RenderAction 区别
1. Html.partial和RenderPartial的区别 Html.partial和RenderPartial都是输出html片段,区别在于: @Html.Partial用于将分部视图渲染为 ...
- html.partial的作用,Html.RenderPartial()与Html.Partial()区别
这个HtmlHelper的扩展方法Partial,和HtmlHelper自带的 RenderPartial功能比较接近, 两者都可以输出一个Partial视图:其区别如下: . Partial有返回值 ...
最新文章
- 2022-2028年中国成人艺术培训行业市场前瞻与投资战略规划分析报告
- 运维经验分享:关于系统运维监控的几点建议
- Qt 中使用QPainter时,实现坐标变化的方法
- v-distpicker 一个好用的三级联动的插件
- SAP HANA数据库的搜索执行原理
- 工作67:el-table问题
- 由浅到深理解ROS URDF教程
- 人力资源管理系统、OA、行政管理系统、考勤管理、资产管理、车辆管理、绩效管理、员工管理、招聘、入职、离职、转正、加班、调休、企业OA系统、axure原型、rp源文件、web端后台管理原型、高保真原型
- ELK下Kibana的使用
- DoS攻击原理与实战(LOIC+Hping3)
- 微型计算机原理第三版 课后答案 王忠民
- 在Word中快速插入分隔线
- 【WPS单元格】汉字转拼音的方法
- android面试题之二(红黑联盟)
- 软件工程测试题(雨课堂学堂在线选择题汇总)
- 这样可以几分钟快速对接支付宝APP支付和手机网站支付
- 浅谈ElasticSearch
- Git 提交和拉取服务器最新版本代码方法
- LinuxI/O多路复用转接服务器——epoll模型实现
- Android Visca 协议控制电子云镜(Android ndk)
热门文章
- bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理
- java修改cookie的值_Java管理Cookie增删改查操作。
- json for-in 来循环对象的属性
- php解析定时任务格式,php 实现定时任务简单实现
- c++位运算_最全位运算总结
- 光复用技术中三种重要技术_【技术文章】X射线无损检测仪在锂电池行业中的重要应用...
- java程序设计_Java程序设计-类和对象(笔记)
- java cipher.dofinal_cipher.dofinal方法
- spark官方文档_Spark机器学习之Pipeline
- pythontransform详解_Python自定义聚合函数merge与transform区别详解