Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的。

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

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

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

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

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

Controller:用户控件所在Controller

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

View:调用用户控件的View

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

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

什么是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。

什么是Html.RenderAction?

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

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

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

[OutputCache(Duration=)]
public ActionResult Show()
{
var tagData = null;
//Get data from database
//tagData = tagService.AllHot();
return PartialView("TagCloud", tagData);
}

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

两者的相同点

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

2.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!

对这四个的区别做一个总结,清理一下思路,方便以后使用:

1、带有Render的方法    @Html.Partial 对应 @{Html.RenderPartial(....);}     @Html.Action 对应  @{Html.RenderAction(....);}

2、Action、RenderAction加载方法的视图,执行

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");

MVC中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别的更多相关文章

  1. asp.net MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    @Html.Action:需要有对应的Action,并且Action方法有返回值.(注:处理完业务逻辑同时,也需要返回所需值) @{Html.RenderAction}:需要有对应的Action,Ac ...

  2. 转载ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    对这四个的区别做一个总结,清理一下思路,方便以后使用: 1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用:     @Ht ...

  3. @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 对这四个的区别做一个总结,清理一下思路 ...

  4. @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 .(转)

    mvc renderaction   renderpartial  杂谈      Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. ...

  5. asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别

    转载自 :  <asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别> 先复制过来 ...

  6. asp.net MVC3.0 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

    asp.net MVC3.0 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction 1.带有Render的方法返回值是v ...

  7. asp.net 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

    1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用: @Html.Partial 对应 @{Html.RenderParti ...

  8. 乡下人重拾MVC——@RenderBody @RenderSection @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction

    1.   @RenderBody()  代表:是一个占位符,是留给子页面的位置,子页面使用这个模版,子页面中的内容会被放到@RenderBody的位置.合并后当作一个整体加载 2.   @Render ...

  9. @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction [转]

    @Html.Action:需要有对应的Action,并且Action方法有返回值.(注:处理完业务逻辑同时,也需要返回所需值) @{Html.RenderAction}:需要有对应的Action,Ac ...

随机推荐

  1. MFC List Control 控件添加单元格编辑,实现可编辑重写

    在实现随机生成四则运算的个人项目中,目前已经完成基本功能,想要把程序变成一个Windows界面的程序.原本以为学习过MFC,应该很快就能完成.但是由于以前用的都是VC6.0,这次用了VS2010,稍微 ...

  2. Solr整合中文分词组件IKAnalyzer

    我用的Solr是4.10版本, 在csdn下载这个版本的IKAnalyzer:IK Analyzer 2012FF_hf1.zip 解压后目录如下: (1)这里还用solr自带的example实验分词 ...

  3. Spring Bean配置

    Spring 是什么 •Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. •Spring 是一个 IOC(DI) 和 ...

  4. 初识selendroid

    Testerhome社区的lihuazhang对selendroid官网的部分内容进行了翻译和讲解. 以下内容均摘自lihuazhang.感谢lihuazhang的讲解.原文地址:https://gi ...

  5. [转]解决ubuntu下面putty不能连接RS232串口(USB2COM线)

    http://m.blog.csdn.net/blog/wuyanrobert_tjsd/33045255 最后还是sudo了,感觉注销后没有加入dialout组

  6. ACM 矩阵题目整理

    先从最基础的矩阵快速幂加速递推开始. HDU 1005 Number Sequence |f[n-2],f[n-1]|* |0 B| =|f[n-1], B*f[n-2]+A*f[n-1]|=|f[n ...

  7. mysql表分区(摘自 MySQL表的四种分区类型)

    一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  8. HDU 1538

    http://acm.hdu.edu.cn/showproblem.php?pid=1538 经典经济学问题,海盗分金 分析http://www.guokr.com/article/41423/ #i ...

  9. PHP数组操作汇总 php数组的使用技巧

    对于Web编程来说,最重要的就是存取和读写数据了.存储方式可能有很多种,可以是字符串.数组.文件的形式等.   数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是我学习的小 ...

  10. B-Tree算法分析与实现

    在数据库系统中,或者说在文件系统中,针对存储在磁盘上的数据读取和在内存中是有非常大的区别的,因为内存针对任意在其中的数据是随机访问的,然而从磁盘中读取数据是需要通过机械的方式来读取一个block,不能 ...