Html.Partial(), 返回HTML字符串 。参数为部分视图

html.RenderPartial(),不返回返回HTML字符串 ,直接输出响应流。参数为部分视图

一般用于主视图中已经存在了这个视图所需要的模型或通过当前控制器操作方法ViewBag动态对象已经带回到了视图中。一般形式为 @Html.Partial("_particalView",Model).或@{html.RenderPartial("_particalView",Model);}

html.RenderPartial()性能一般优于Html.Partial()。

Html.Action(),返回返回HTML字符串 ,需要调用 控制器上的操作方法(一般为[ChildAction]),通过操作方法返回一个部分视图。 参数为操作方法。

Html.RenderAction()  不返回返回HTML字符串 ,直接输出响应流。参数为控制器操作方法。

Html.RenderAction() 性能一般优于 html.Action()

一般用于主视图中不存在模型,需要调用操作方法去取得模型。一般形式为 @Html.Action("_someAction",routedata),@{Html.RenderAction("_someAction",routedata),routedata);} 用于给控制器操作方法传递参数。再由子操作方法返回一个分部视图, return PartialView("_LeftSideMenu", viewModels);

Html.Action()和Html.RenderAction() 的灵活性比 Html.Partial()和html.RenderPartial()要高,可以在调用的Action 中对处理进行处理。

并且 Html.RenderAction() 和html.Action 在asp.net MVC 可以跨控制器使用,利于同一项目中代码的重用。 html.RenderPartial()和 Html.Partial() 只有在模型类型相同的情况下才能利用,

实例:

在Home 控制器的List方法的视图 List.cshtml中:

div class="row">
<div class="col-md-3">
@*体现了分部视图的优势相当于用户控件共享的优势。既可供Home控制器使用,同时也供Article控制器使用,但主控制器必须提供相应的参数或ViewBag动态参数。由于采用的是Html.RenderAction方法,所有共享的是实际上是操作方法,但实际效果是共享视图。*@
@{Html.RenderAction("LeftSideMenu", "home", new { area = "", ActiveCategoryID = ViewBag.CategoryID });} <!--//返回一个导航菜单面板 ,通过链接的 RouteValue 传递一个参数数。-->
@{Html.RenderAction("ClickRangeOnCategory", "home", new { area = "", ActiveCategoryID = ViewBag.CategoryID });} <!--//返回一个本栏目的点击排行-->

</div>

Home控制器中的操作方法:

[ChildActionOnly]

public ActionResult LeftSideMenu(string ActiveCategoryID)
{
var categorys = _categoryService.FindAll().Where(c => c.NavbarIsShow).OrderBy(c => c.PriorOrder).ToList();
List<CategoryLeftSideViewModel> viewModels =new List<CategoryLeftSideViewModel>();
foreach( var item in categorys)
{
int _categoryCount = _articleService.FindAll().Where(a => a.CategoryID == item.CategoryID).Count();
viewModels.Add(new CategoryLeftSideViewModel { CategoryID=item.CategoryID,CategoryName=item.CategoryName, Active=(item.CategoryID ==ActiveCategoryID), ArticleCount=_categoryCount});

}

return PartialView("_LeftSideMenu", viewModels);

}

[ChildActionOnly]
public ActionResult ClickRangeOnCategory(string ActiveCategoryID)
{
var articles = _articleService.FindAll().Where(a => a.Category.CategoryID == ActiveCategoryID);
if (articles.Count() >= 5)
{
articles = articles.Take(5);
}

return PartialView("_ClickRangeOnCategory", articles.OrderByDescending(a => a.ClickCount).ThenByDescending(a =>a.PostTime).ToList());

}

在Article控制器中的listArticle.cshtml 视图中使用,

<div class="row">
<div class="col-md-3">
@*体现了分部视图的优势相当于用户控件共享的优势。既可供Home控制器使用,同时也供Article控制器使用,但主控制器必须提供相应的参数或ViewBag动态参数。由于采用的是Html.RenderAction方法,所有共享的是实际上是操作方法,但实际效果是共享视图。*@
@{Html.RenderAction("LeftSideMenu", "home", new { area = "", ActiveCategoryID = ViewBag.CategoryID });} <!--//返回一个导航菜单面板 ,通过链接的 RouteValue 传递一个参数数。-->
@{Html.RenderAction("ClickRangeOnCategory", "home", new { area = "", ActiveCategoryID = ViewBag.CategoryID });} <!--//返回一个本栏目的点击排行-->

</div>

由于 使用了@html.RenderAction(),所以不需要在Article控制器中定义操作方法,只是重新调用一次 home控制器的LeftSideMenu、ClickRangeOnCategory方法。就能在跨控制器的不同的视图中得到相同的部分视图。

很好的实践了DRY原则。(不要重复你自己)。

Html.PartialView(),html.Renderpartial,html.action.html.RenderAction 辅助方法的更多相关文章

  1. ASP.NET MVC Html.Partial/Html.RenderPartial/Html.Action/Html.RenderAction区别

    1. @Html.Raw() 方法输出带有html标签的字符串: <div style="margin:10px 0px 0px;border:1px;border-color:red ...

  2. Html.Partial,Html.RenderPartial Html.Action,Html.RenderAction区别

    @Html.Partial,@Html.RenderPartial      这两者的共同点都是在视图中去调用另外一个视图,区别是   Html.Partial 有返回值 ( MvcHtmlStrin ...

  3. MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别

    在视图里有多种方法可以 加载部分视图,包括: Partial()  Action()  RenderPartial()  RenderAction()  RenderPage() 方法. 以下是这些方 ...

  4. ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction差别

    使用方法:@Html.Action(action, controller)加载局部页面.例如在模板页中使用:@Html.Action("Contact", "Compan ...

  5. ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

    1.Action.RenderAction加载办法的视图,履行Controller → Model → View的次序,然后把产生的页面带回到本来的View中再回传.而Partial.RenderPa ...

  6. 【转】Action 、 RenderAction 、 Partial 、 RenderPartial 区别

    1.Action . RenderAction Action 方法以字符串的形式返回子视图,可以直接被呈现.RenderAction方法在适当的地方呈现子视图. //One alternative ( ...

  7. 部分视图调用方法总结(Action 、 RenderAction 、 Partial 、 RenderPartial)

    Action . RenderAction . Partial . RenderPartial 1.Action . RenderAction Action 方法以字符串的形式返回子视图,可以直接被呈 ...

  8. jQuery中设置form表单中action的值的方法

    下面介绍在jQuery中设置form表单中action的值的方法. $("#myFormId").attr("action", "userinfo.s ...

  9. Sturts2的action不执行任何方法的原因

    今天用<s:url action="xxx">调用action的时候出现了一个“异常”, action里的任何方法都没有执行,直接返回success,而且没有任何报错. ...

随机推荐

  1. Linux kernel 内核学习路线

    看了下各位大神的推荐路线,总结如下: 0. 跟着项目走: 1. 学会用.熟练用linux系统: 2. Linux Kernel Development. 3. Understanding the Li ...

  2. webpack体积优化篇一

    定位 webpack 大的原因   这里推荐使用 webpack-bundle-analyzer —— Webpack 插件和 CLI 实用程序,她可以将内容束展示为方便交互的直观树状图,让你明白你所 ...

  3. Java泛型的主要用途

    1.泛型的主要用途就是代替各种类型,作为一个笼统的整体类型代替,也就是代替参数,不论是传入参数还是返回参数.都可以用泛型来代替. 如dao操作类的增删改查操作,因为传入参数的类型不同,但基本都是相同接 ...

  4. GO语言 --socket.io

    socket.io是对websocket的封装以及扩展, 可以跨平台使用, 具体可看官网.. GO语言实现: package main import ( "github.com/googol ...

  5. javascript创建对象总结(javascript高级程序设计)

    1.工厂模式 这样的模式抽象创建详细对象的过程.用函数封装特定的接口来创建类. function createStudent(name) { var o = new Object(); o.name ...

  6. 多平台密码绕过及提权工具Kon-Boot的使用与防范

    在单用户的机器上密码可能没那么重要,但是一旦有多个用户可以使用这台机器,密码就显得十分必要了(比如有儿童账户的电脑).所以说为你的电脑增设一条防线的最常用,最简单的方法就是用密码将你的电脑保护起来,但 ...

  7. 支付宝移动支付之IOSApp调用支付宝钱包

    近期客户提出要开发一个IOS上的app作为訪问他们站点的途径之中的一个.为什么说之中的一个呢.因为眼下PC和Mobile这两个站眼下都已经上线了. 所以问题就简单了,我们仅仅须要把mobile站UI改 ...

  8. webstorm 6.0 注册码

    User Name: EMBRACE   License Key: ===== LICENSE BEGIN ===== 24718-12042010 00001h6wzKLpfo3gmjJ8xoTPw ...

  9. 在windows cgywinportable上,通过运行linux命令,批量改动文件名。

    在windows cgywinportable上.通过运行linux命令.批量改动文件名. 实例:将当前文件夹下的全部文件名称加上.sql find ./ -type f -exec mv {}  ' ...

  10. 深入分析JavaWeb Item13 -- jsp指令具体解释

    一.JSP指令简单介绍 JSP指令(directive)是为JSP引擎而设计的.它们并不直接产生不论什么可见输出,而仅仅是告诉引擎怎样处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指 ...