1、引言

  开发人员经常希望应用程序可以在多个不同的地方使用同样的Razor标签和HTML标记代码。这并不需要我们在多个地方重复这些标签,使用MVC中的分部视图和子动作可以让我们很好的解决类似的情况。

2、Partial、RenderPartial的使用

  使用MVC中的Html.RenderPartial、Html.RenderAction都可以在主界面中嵌入分部视图,下面就来介绍这两种技术。

  我们创建一个视图文件MyPartialView.cshtml。保存在Views/Home/文件夹下。与主界面放在一个文件夹下。其HTML标签:

@model List<string>
<div><hr /><p>我是分部视图MyPartialView.cshtml</p>@*<p>传递的数据如下:</p>*@<ul>@if(Model!=null){foreach(var item in Model){<li>@item</li>}}</ul>@*<p>传递的字符串是:</p>@ViewData["Para"]*@<hr />
</div>

  主界面Views/Home/Index.cshtml的HTML标签如下:

@{Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>当前页面是:Home/Index.cshtml,调用分部视图MyPartialView.cshtml<br />@{ViewData["Parameter"]="Values";var data = new ViewDataDictionary();data.Add("Para", ViewData["Parameter"]);}@*@Html.Partial("MyPartialView",new List<string>{"str1","str2","str3"},data)*@@Html.Partial("MyPartialView")
</h2>

  在浏览器运行后可以看到有如下的效果:

  可以看到我的代码中有一些注释。Html.Partial通过传递参数将数据传递到分部视图。如上图。这时候我吗刷新浏览器就可以看到从主界面传递到分部视图的参数了。

注意点:

  1、Partial("MyPartialView")调用时,Razor引擎会在常规位置进行分部视图的查找。先查找Views/Controller中查找,如果找不到到Views/Shared文件夹下进行查找。当然分部视图也可以在这些常规位置以外的地方定义。例如:在Views/Menus/文件夹下定义MyPartialView.cshtml。主界面在调用时需要指定完整的路径。如:Partial("~/Views/Menus/MyPartialView.cshtml")。

  2、Html.Partial用于将分部视图渲染为字符串,{Html.RenderPartial}将分布视图直接写入响应输出流,所以只能直接放在代码块中,不能放在表达式中(返回值是void)。RenderPartial因为是直接写在响应流中,所以性能会更好(微量影响),而Partial不用写在代码块中,所以更方便。

  3、Partial、RenderPartial在执行时都只是把一个个的View嵌入到调用界面中,其中不涉及到控制器的操作。不需要经过控制器View()来进行视图的渲染操作。

3、Action、RenderAction的使用(子动作)

  子动作是通过视图来调用的动作方法。如果希望将某种控制器逻辑在应用程序的多处进行复用时,可以通过子动作来解决。

  我们在Views/Home/文件夹下新建一个MyChildAction.cshtml视图文件。其HTML标签及代码如下:

@model DateTime
@{ViewBag.Title = "MyChildAction";
}
<h2>子动作界面</h2>
<p>当前服务器时间是:</p>
<p>@Model.ToShortDateString()</p>

  我们现在来看HomeController中对于子动作的方法。代码如下:

public class HomeController : Controller{public ActionResult Index(){return View();}/*** 只能被子动作调用* */[ChildActionOnly]public ActionResult MyChildAction(){return PartialView(DateTime.Now);}}

  我们看到HomeController中这个子动作只是简单的返回一个服务端的当前时间。然后对MyChildAction视图文件进行渲染。通过在主界面调用@{Html.RenderAction("MyChildAction");}。在使用分部视图时推荐使用PartialView()。因为View()返回会让框架认为这是一个标准视图,会自动加上Layout布局文件。使用PartialView不会自动加上布局文件。

  我们看到Html.RenderAction("MyChildAction")会导致MVC框架在处理当前请求的控制器中(例子中是:HomeController)查找一个动作方法。如果在其他控制器中定义了一个子动作。可以指定控制器的名称。

例如:Html.RenderAction("MyChildAction","MySimple")。这样MVC框架就会在MySimpleController控制器中查找MyChildAction方法进行执行。

  在子动作中,可以在调用的时候进行参数的传递。如下所示:

[ChildActionOnly]
public ActionResult MyChildAction(DateTime time)
{time = time.AddYears(2);return PartialView(time);
}

  调用界面在调用时可以通过匿名对象来传递参数。如: @{Html.RenderAction("MyChildAction", new { time = DateTime.Now });}

注意点:

  1、子动作是通过控制器来执行动作方法。处理ViewResult,然后注入到发送给客户端的响应流中。这个方法相对于Partial比较灵活,它可以利用控制器的上下文。

  2、ChildActionOnly注释可以确定一个视图方法只能在视图中作为子动作进行调用。防止该子动作作为一个用户请求的结果被调用。

4、Partial、Action两者的异同点

  相同点:

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

  不同点:

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

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

最后给出一张图来直观的比较两者的不同吧

转载于:https://www.cnblogs.com/dreamGong/p/4548730.html

Html.RenderPartial、Html.RenderAction联系与区别相关推荐

  1. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法【转发】

    Html.partial和RenderPartial的用法与区别 Html.partial和RenderPartial都是输出html片段,区别在于 Partial是将视图内容直接生成一个字符串并返回 ...

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

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

  3. Partial RenderPartial Action RenderAction 区别和用法

    为什么80%的码农都做不了架构师?>>>    区别: 1.Partial 与 RenderPartial 两个方法性质基本一样,只是把一个静态用户控件给嵌入进来. 2.Partia ...

  4. MVC中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. 1. Html.RenderPartial是直接将用户控件嵌入到界面上: <% ...

  5. MVC中Html.Partial, RenderPartial, Action,RenderAction 区别

    1.  Html.partial和RenderPartial的区别 Html.partial和RenderPartial都是输出html片段,区别在于: @Html.Partial用于将分部视图渲染为 ...

  6. Asp.netMVC中Html.Partial,RenderPartial,Action,RenderAction区别和用法

    https://www.2cto.com/kf/201702/602449.html Partial 和RenderPartial: 这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传 ...

  7. Asp.Net MVC中的RenderPartial 和 RenderAction 【转】

    在Asp.Net MVC中要实现某个功能可以通过许多种方式,今天我们就来讨论下使用RenderPartial和RenderAction在视图中呈现部分内容之间的区别. 比如我们要呈现如下的图所示的内容 ...

  8. html.partial的作用,Html.RenderPartial()与Html.Partial()区别

    这个HtmlHelper的扩展方法Partial,和HtmlHelper自带的 RenderPartial功能比较接近, 两者都可以输出一个Partial视图:其区别如下: . Partial有返回值 ...

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

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

  10. RenderPartial和RenderAction区别

    本篇参考了 Shailendra Chauhan和 Jag Reehal的博文. RenderParital和RenderAction的共同点: ※ 都能返回部分视图 ※ 返回的部分视图和主视图共用一 ...

最新文章

  1. Javascript学习笔记(三)--变量、作用域和内存问题
  2. DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用
  3. 用Jackson进行Java JSON处理
  4. vuex Payload 荷载
  5. 数据结构与算法-时间复杂度
  6. VOIP术语及相关知识
  7. getOutputStream() has already been called for this response异常的原因和解决方法[转]
  8. 《从零开始学Swift》学习笔记(Day 45)——重写方法
  9. 数据挖掘学习07 - 《数据挖掘导论》第二章:数据
  10. Linux 虚拟机配置静态IP地址
  11. FDDB人脸检测测评数据集介绍
  12. c语言实验总结200字,数控毕业生自我鉴定200字(精选3篇)
  13. 《写作是门手艺》读书笔记
  14. eureka的自我保护机制?
  15. 极客时间《数据分析实战45讲 - 基础篇》学习笔记
  16. Beaglebone Black– 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号...
  17. WINDOWS10突然无法识别U盘(设备和驱动器中不显示)的解决方法
  18. 计算机病毒金山毒霸,金山毒霸网络版成为计算机病毒的客星
  19. WIN10 2004 打印机无法共享的设置办法
  20. MyBatis与Spring整合

热门文章

  1. 2022年光伏玻璃行业重点企业市场竞争格局分析及投资战略规划指导咨询预测
  2. html5到底部自动加载,列表滚动到底部自动加载更多
  3. 洛谷P3722 [AH2017/HNOI2017]影魔
  4. 功率谱密度(功率信号)、能量谱密度(能量信号)详解
  5. Linux安装mysql报错:Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
  6. 关于PKI公私钥的那些事
  7. 2021年中国钴产量、钴消费及钴产品企业分析:钴在动力电池领域消费占比最多[图]
  8. 被裁员了,惨遭时代的车轮无情的碾压
  9. 极光尔沃:3D打印机使用过程常见问题解决方法
  10. 直播m3u8 参数#EXT-X-DISCONTINUITY