Html.PartialView(),html.Renderpartial,html.action.html.RenderAction 辅助方法
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 辅助方法的更多相关文章
- 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 ...
- Html.Partial,Html.RenderPartial Html.Action,Html.RenderAction区别
@Html.Partial,@Html.RenderPartial 这两者的共同点都是在视图中去调用另外一个视图,区别是 Html.Partial 有返回值 ( MvcHtmlStrin ...
- MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别
在视图里有多种方法可以 加载部分视图,包括: Partial() Action() RenderPartial() RenderAction() RenderPage() 方法. 以下是这些方 ...
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction差别
使用方法:@Html.Action(action, controller)加载局部页面.例如在模板页中使用:@Html.Action("Contact", "Compan ...
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
1.Action.RenderAction加载办法的视图,履行Controller → Model → View的次序,然后把产生的页面带回到本来的View中再回传.而Partial.RenderPa ...
- 【转】Action 、 RenderAction 、 Partial 、 RenderPartial 区别
1.Action . RenderAction Action 方法以字符串的形式返回子视图,可以直接被呈现.RenderAction方法在适当的地方呈现子视图. //One alternative ( ...
- 部分视图调用方法总结(Action 、 RenderAction 、 Partial 、 RenderPartial)
Action . RenderAction . Partial . RenderPartial 1.Action . RenderAction Action 方法以字符串的形式返回子视图,可以直接被呈 ...
- jQuery中设置form表单中action的值的方法
下面介绍在jQuery中设置form表单中action的值的方法. $("#myFormId").attr("action", "userinfo.s ...
- Sturts2的action不执行任何方法的原因
今天用<s:url action="xxx">调用action的时候出现了一个“异常”, action里的任何方法都没有执行,直接返回success,而且没有任何报错. ...
随机推荐
- Android应用的权限配置和权限列表
权限配置写在Mainifest.xml文件中: <?xml version="1.0" encoding="utf-8"?> <manifes ...
- Request获取Session的两种方式
1.无请求参数 public HttpSession getSession() 获取当前request关联的session,如果当前request没有session,创建一个session. 2.有请 ...
- [NOIP2001] 提高组 洛谷P1025 数的划分
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...
- js9:设置cookie,读取cookie,删除cookie,保存cookie时间,String,Date对象
原文发布时间为:2008-11-11 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- vs2010 静态使用 opencv 2.46 库
下载opencv2.46的库,假设解压到OpenCV246,设置如下: 在工程的c++的include目录下添加:OpenCV246\opencv\build\include 在工程的c++的lib目 ...
- Codeforces Round #533 (Div. 2) E 最大独立集
知识点 最大独立集(set) = 补图的最大团(clique ) 最小顶点覆盖 + 最大独立集 = V E. Helping Hiasat time limit per test 2 seconds ...
- ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路
https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析 分层最短路 我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...
- [Bzoj1009][HNOI2008]GT考试(KMP)(矩乘优化DP)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4309 Solved: 2640[Submit][Statu ...
- Spring MVC页面重定向实例
以下内容引用自http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-page-redirection-example.html ...
- 学习swift从青铜到王者之swift枚举07
空枚举 //空枚举 enum SomeEnumeration { // enumeration definition goes here } 枚举基本类型 //枚举基本类型 enum CompassP ...