C#中Html.RenderPartial与Html.RenderAction的区别分析

本文较为详细的讲解了C#中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来调用用户控件

在页面直接渲染 Action的结果  可以指定Controller  返回的可以是继承自ActionResult的所有子类型

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

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

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

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

个人比较喜欢用RenderPartial

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

两者的相同点:

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

两者的不同点:

RenderPatial的数据来自于调用的View,而RenderAction来自自己。
RenderAction会发起一个新的Request,而RenderPatial不会。

如何选择:

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

(0)

相关推荐

  • 详解C# partial 关键字的使用

    什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现. (2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起. (3) 需要多人合作编写一个类. 例: 在同一命名空间下  在class2类中   写class2 的实例 加关键字 partial 在class3类中   写class2 的实例 加关键字 pa

  • C#中partial关键字的作用

    1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现. (2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起. (3) 需要多人合作编写一个类. 局部类型是一个纯语言层的编译处理,不影响任何执行机制--事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类. public partia

  • C# Partial:分部方法和分部类代码实例

    using System; namespace Partial { class Program { static void Main(string[] args) { A a = new A(); } } partial class A { public A() { PrintHello(); PrintWorld(); Console.Read(); } partial void PrintHello() { Console.Write("Hello"); } } partial c

  • C# partial关键字说明

    C# 中可以将类.结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可. 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现. (2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起. (3) 需要多人合作编写一个类. 局部类型是一个纯语言层的编译处理,不影响任何执行机制-

  • C#中Html.RenderPartial与Html.RenderAction的区别分析

    本文较为详细的讲解了C#中Html.RenderPartial与Html.RenderAction的区别,具体分析如下: Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. Html.RenderPartial是直接将用户控件嵌入到界面上: 在页面直接渲染 视图结果  视图必须存在! <%Html.RenderPartial("LogOnUserControl");%> 或 <%Html.RenderPa

  • JavaScript中Object、map、weakmap的区别分析

    前言 ECMAScript 6以前,在JavaScript中实现"键/值"式存储可以使用Object来方便高效地完成,也就是使用对象属性作为键,再使用属性来引用值.但这种实现并非没有问题,为此TC39委员会专门为"键/值"存储定义了一个规范.作为ECMAScript 6的新增特性,Map是一种新的集合类型,为这门语言带来了真正的键/值存储机制.Map的大多数特性都可以通过Object类型实现,但二者之间还是存在一些细微的差异.具体实践中使用哪一个,还是值得细细甄别.

  • MySQL中create table as 与like的区别分析

    本文分析了MySQL中create table as 与like的区别.分享给大家供大家参考,具体如下: 对于mysql的复制相同表结构方法,有create table as 和create table like 两种,区别是什么呢? 复制代码 代码如下: create table t2 as select * from t1 where 1=2; 或者 复制代码 代码如下: limit 0; as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引. 复制代码 代码如

  • php中静态类与静态变量用法的区别分析

    本文实例分析了php中静态类与静态变量用法的区别.分享给大家供大家参考.具体分析如下: static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了. 1. 创建对象$object = new Class(),然后使用"->"调用:$object->attribute/function,前提是该变量/方法可访问. 2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态

  • jQuery中hover与mouseover和mouseout的区别分析

    本文实例分析了jQuery中hover与mouseover和mouseout的区别.分享给大家供大家参考,具体如下: 以前一直以为在jquery中其实mouseover和mouseout两个事件等于hover事件.两个没什么区别,应该是一样的.但昨天一个动画效果才让我见识了,这两个并不能等同. <div class="wrapper"> <div class="img"></div> <div class="tex

  • asp.net中Session缓存与Cache缓存的区别分析

    其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息. Session则保存对话信息. Application则是保存在整个应用程序范围内的信息,相当于全局变量. Session用的比较多. Session缓存与Cache缓存的区别,可以参考如下的几点: 1.最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效. 2.即使应用程序终止,只要Cache.Add方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在.

  • asp.net中Request.QueryString与Request.Param的区别分析

    request.params其实是一个集合,它依次包括request.querystring.request.form.request.cookies和request.servervariables. 如果要在两个页面传递数据的话,只能用request.querystring.request.form.request.cookies Request.Params 是在 QueryString.Form.Server Variable 以及 Cookies 找数据, 他首先在 QueryStrin

  • ASP中Null,Empty,Nothing的区别分析

    本文介绍在ASP中,NULL,Empty,Nothing这几种空值的来源和判断方法. Dim   A   Dim   B   As   String   Dim   C   As   Integer   Dim   D   As   Object A  等于 Empty,因为尚未初始化的「不定型变量」都等于 Empty.但如果检测 A = "" 或 A = 0,也都可以得到True 值.   B  等于   "", 因为尚未初始化的非固定长度「字串」都等于 &quo

  • C#中Request.Cookies 和 Response.Cookies 的区别分析

    .NET中提供了读写Cookie的多种方法,Request.Cookies 是客户端通过 Cookie 标头形式由客户端传输到服务器的 Cookie:Response.Cookies 在服务器上创建并以 Set-Cookie 标头的形式传输到客户端.也就是说,一个是客户端向服务器端发送的来的,一个是服务器发送到客户端的. 第一次创建Cookies的时候,下面的2种读取方法读取到的内容是一样: C# 代码 复制代码 代码如下: HttpCookie hc = new HttpCookie("Use

  • MySQL中REPLACE INTO和INSERT INTO的区别分析

    注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义.该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行. [separator] 所有列的值均取自在REPLACE语句中被指定的值.所有缺失的列被设置为各自的默认值,这和INSERT一样.您不能从当前行中引用值,也不能在新行中使用值.如果您使用一个例如"SET col_name = col_name + 1"的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(c

随机推荐