最近在学习MVC布局的一些东西,在网上跟一些有经验的技术大神们学习了一些内容,再加上自己的一些实践,慢慢的也有了一点心得体会,下面将它记载下来,便于有需要的人也便于自己翻阅。另外,我的实践过程中选择的是Razor视图引擎。

一 MVC中的部分视图PartialView:

  MVC中的PartialView其实相当于用户控件ascx,其主要作用主要包括两方面:

  •   可复用性:如果视图中的一部分内容会在多个地方用到,那么有必要将它写成一个分部视图,这样就不必在每一个视图中都重新写一遍,而直接调用分部视图就可以了;
  •   便于维护:如果一个View有许多块组成,那么可以将这些块拆分成多个分部视图,这样就不必在一个Action中处理许多的数据或者是在一个View中写很多的html语言了,虽然这需要添加很多的cshtml文件或者Action,但是当某一块的数据发生变化就很容易管理和维护了,只需要对这个块的内容进行维护,而不必全局的去调整,这样一来岂不更显得有条理性?

二 分部视图的调用:

  在一个View中调用分部视图主要有下列四种方法:

  • @Html.Patial  
  • @Html.RenderPatial
  • @Html.Action
  • @Html.RenderAction

  例如调用Html.RenderPartial有四种方式:

  Html.RenderPartial(string partialName);

  Html.Renderpartial(string partialName,object model);

  Html.RenderPartial(string partialName,ViewDataDictionary viewData);

  Html.RenderPartial(string partialName,object model,ViewDataDictionary viewData);

  更加具体的方法详见MSDN:http://msdn.microsoft.com/zh-cn/library/system.web.mvc.html.renderpartialextensions.renderpartial(v=vs.108).aspx

三 Html.RenderPatial和Html.RenderAction的主要区别:    

  Html.RenderPatial:直接将View呈现在父视图的相应地方,View中绑定的Model需事先生成好

  Html.RenderAction:需要进入子视图对应的Action方法中,按照Controller->Model->View的顺序走一遍,然后将产生的View呈现在父视图相应的地方,如果要呈现的视图需要后台处理数据,那么需要选用Html.RenderAction或者Html.Action。

比较形象的描述:

      

四 Html.RenderPartial和Html.Partial以及Html.RenderAction和Html.Action的区别:

  Html.Partial和Html.Action都返回的是字符串,可以将它们的返回值赋给一个变量

  Html.RenderPartial和Html.RenderAction都返回void,而内容会在执行的时候直接写到Response中,

  这样一来在View中加载它们的方式也就不一样了:

  @Html.Partial("PartialViewName")

  @Html.Action("Action", "Controller")

  @{ Html.RenderPartial("PartialViewName");}

  @{ Html.RenderAction("Action", "Controller");}

  在使用中,关于Html.Partial和Html.RenderPartial以及Html.Action和Html.RenderAction具体选用哪一种,我也不清楚,但引用下面的一段话,希望有明白的大神们给出解释和补充,源文地址:http://www.shunyi.net/forum/view/id-35120

  我更多的时候会用 RenderPartial 和RenderAction 因为这两种方法在输出内容时使用的TextWriter就是当前Template所用的. 与此相反@Html.Partial 和@Html.Action 两种方法每次都会创建自己的 TextWriter 实例并且把内容缓存在内存中. 最后把所有 writer输出的内容发送到一个 MvcString对象中 所以它可以当成 unescaped HTML用@直接渲染.

  On the other side I do not entirely through away@Html.Partial and@Html.Action. These methods are good for some cases when you need to put sub-template content into a variable or do something with it (which was a pain in older MVC versions). And they may be life-saving in certain scenarios like caching.

  Oh there is also a@RenderPagemethod ofWebPagebasethat doesn’t use MVC template lookup and receives exact template path as its parameter. But anyway I would use HtmlHelper’s Partial instead as it is a more traditional view-engine independent approach for rendering child templates.

It is true that the result is the same. Html.Partial returns the partial view as a string so basically you can stil do anything with the rendered content before you emit it. If you use RenderPartial you are directly writing to the output stream and because of this RenderPartial will be a bit faster.

转载于:https://www.cnblogs.com/sophia-yun/archive/2012/10/14/2721635.html

MVC PartialView视图使用心得相关推荐

  1. ASP.Net MVC PartialView的应用

    ASP.Net MVC PartialView的应用 1.PartialViewResult,Controller类提供了4种重载方法 protected internal PartialViewRe ...

  2. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

    这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...

  3. mvc的视图中显示DataTable的方法

    mvc的视图中显示DataTable的方法: 不断的循环画出table @{ViewBag.Title = "ShowDataTable"; } @using System.Dat ...

  4. Qt - MVC模型/视图编程

    MVC模型/视图编程 Qt中的模型/视图架构用来实现大量的数据存储.处理及显示. MVC(Model-View-Controller)包括了3个组件: 模型(Model)是应用对象,用来表示数据: 视 ...

  5. Restful 风格开发 Spring MVC 的视图解析器---使用 beetl 模板引擎

    一.restful 风格 restful 的目的 将用户的行为当成是对数据库中记录的操作: 增加用户:/user post(post方式) 删除用户:/user/2 delete(删除第2条记录) 修 ...

  6. MVC |分部视图 PartialView()

    介绍如何定义 其实它和普通视图没有多大区别,只是创建分部视图的时候视图里没有任何内容,你需要什么标签你自己加.第二就是分部视图不会执行_ViewStart.cshtml中的内容) 控制器 Partia ...

  7. 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?

    起因 这是知识星球内的一个网友提出的,按理说ASP.NET MVC中一个视图只能绑定一个模型(Model),在视图顶部标识如下: @model IEnumerable<FineUICore.Ex ...

  8. ASP.NET MVC编程——视图

    1Razon语法 使用@符号后接C#或VB.NET语句的方式. 基本规则 1)变量 @后直接变量即可 2)代码块 为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中 3)"+&qu ...

  9. mvc 在视图中调用别的视图

    在做mvc web时  一个视图需要调用文章页分类名称,思前想后决定用@Html.action实现 从分类控器中最出model然后在,通过分类控件器action 相对应的视图渲染,显示在文件页中 代码 ...

最新文章

  1. 浅谈Javascript中的void操作符
  2. Java多线程(二):Thread类
  3. java定义一个方法,返回a的b次方
  4. 可到了关键部分的作文
  5. 笨办法学 Python · 续 练习 17:字典
  6. 科技圈CEO用微鲸尬明星脸,除了罗永浩还有哪些大牛光荣上榜?
  7. eclipse:STS下载使用(STS(Spring Tool Suite)其实是个被包装过的eclipse)
  8. Windows屏幕保护程序的制作
  9. Excel工作表保护的密码破解与清除...假装自己破解密码系列?
  10. 老毛桃PE工具去除捆绑软件的方法
  11. jsp里table边框线_JSP表格边框颜色
  12. [技术讨论]从ERP免费开始到做人做事的讨论
  13. 机器学习 | 样本不平衡问题处理方法
  14. CS1526号错误是什么
  15. 机器学习:kNN算法(一)—— 原理与代码实现(不调用库)
  16. 猿学~黑客、红客、白帽子之间的技术较量,为什么大公司都有黑客团队?
  17. 第十三届蓝桥杯(Web 应用开发)线上模拟赛【第三题】(封装函数实现个人所得税计算器)
  18. 完全替代ALTERA EP4CE10, 国产AGM FPGA 的AG10K系列与之pin to pin 兼容
  19. 机器人会偷走你的饭碗吗——药剂师 vs. 巨型药品包装机
  20. 对于机械键盘的一些见解(转载)

热门文章

  1. 常用的分隔符有哪三种_掌握这三种调漂方法,你想怎么钓就怎么钓,再也不用求人...
  2. mysql数据库权限传递,mysql数据库权限分配-参考
  3. php的foreach什么意思,php中foreach的用法是什么,php foreach as
  4. 老师使用计算机给小孩子上课,“某某中学教师课堂教学现状”调查问卷
  5. linux socket 结构定义 send,Linux下Socket编程中用send发送结构体
  6. dategurd oracle_Oracle之11g DataGuard
  7. asp点击增加一条表格数据_asp生成excel报表(一)
  8. HDU-1281-棋盘游戏(二分匹配)
  9. C++特殊符号:【优先级】
  10. python处理数据集并制作词云图