本篇参考了Shailendra ChauhanJag Reehal的博文。

RenderParital和RenderAction的共同点:

※ 都能返回部分视图

※ 返回的部分视图和主视图共用一个TextWriter对象把内容写到Http Response中

什么时候使用Html.RenderPartial

当部分视图中的数据是主视图的一部分,即部分视图的Model是主视图Model的一个集合类型属性的时候,倾向于用Html.RenderPartial。

就像如下为了展示主视图view model的一个集合类型属性IEnumerable<Comment> Comments,就把这里的Comment作为部分视图的Model。

□ domain model

public class Post

{

public string Title { get; set; }

public string Content { get; set; }

public DateTime DatePublished { get; set; }

}

public class Comment

{

public string Content { get; set; }

public string Author { get; set; }

public string ImageUrl { get; set; }

public DateTime DateCreated { get; set; }

}

□ view model

public class ShowPostViewModel

{

public Post Post { get; set; }

public IEnumerable<Comment> Comments { get; set; }

}

□ Controller

public ActionResult Index()

{

//view model

ShowPostViewModel viewModel = new ShowPostViewModel();

viewModel.Post = new Post

{

Title = "今晚广州恒大将开始2014亚冠联赛之旅",

Content = "创业难守业更难,广州恒大能否卫冕成功,让我们拭目以待!",

DatePublished = new DateTime(2014,2,26)

};

viewModel.Comments = new List<Comment>

{

new Comment()

{

Author = "广州球迷",

Content = "广州未赢够",

DateCreated = new DateTime(2014,2,26)

},

new Comment()

{

Author = "山东球迷",

Content = "今天看我们大鲁能",

DateCreated = new DateTime(2014,2,26)

}

};

return View(viewModel);

}

□ _Comments部分视图

@model IEnumerable<RenderPartialAndRenderAction.Models.Comment>

@foreach (var comment in Model)

{

@comment.Author @:在  @comment.DateCreated.ToLongDateString() 发表评论:

@comment.Content

<hr/>

}

□ Index视图

@model RenderPartialAndRenderAction.Models.ShowPostViewModel

<div>

<h1>@Model.Post.Title</h1>

提交日期 @Model.Post.DatePublished.ToLongDateString() <br/>

@Model.Post.Content <br/>

评论数: @Model.Comments.Count()

<hr/>

@{Html.RenderPartial("_Comments",Model.Comments);}

</div>

□ 结果

什么时候用Html.RenderAction

当部分视图的数据,相对来说,与主视图的关系比较独立,或者在多个主视图页面被用到(比如,可以放到_Layout.cshtml中),用Html.RenderAction比较适合。

就像如下的AnotherViewModel与如上的ShowPostViewModel,相对关系不大。我们就通过或Html.RenderAction来获取有关AnotherViewModel的部分视图。

□ domain model

public class Category

{

public int Id { get; set; }

public string Name { get; set; }

}

□ view model 增加一个用于显示类别的view model

public class AnotherViewModel

{

public string StringToOutput { get; set; }

public IEnumerable<Category> Categories { get; set; }

}

□ Controller,RenderAction("action方法","controller名"),这里的action方法必须打上[ChildActionOnly]

[ChildActionOnly]

public ActionResult ShowCate()

{

var viewModel = new AnotherViewModel

{

StringToOutput = "所有类别",

Categories = new List<Category>

{

new Category()

{

Name = "类别1"

},

new Category()

{

Name = "类别2"

}

}

};

return PartialView(viewModel);

}

□ 视图

<div>

<h1>@Model.Post.Title</h1>

提交日期 @Model.Post.DatePublished.ToLongDateString() <br/>

@Model.Post.Content <br/>

评论数: @Model.Comments.Count()

<hr/>

@{Html.RenderPartial("_Comments",Model.Comments);}

<h5>@{Html.RenderAction("ShowCate");}</h5>

</div>

□ 效果

Html.Partial和Html.Action

Html.Partial和Html.Action相同之处:

※ 返回值都是HtmlString

※ 返回值都都可以赋值给变量

Html.Partial和Html.Action不同之处:

※ 与Html.RenderPartial和Html.RenderAction类似。

RenderPartial和RenderAction区别的更多相关文章

  1. asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别

    转载自 :  <asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别> 先复制过来 ...

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

    ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 对这四个的区别做一个总结,清理一下思路 ...

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

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

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

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

  5. Partial RenderPartial Action RenderAction 区别和用法

    区别: 1.Partial 与 RenderPartial 两个方法性质基本一样,只是把一个静态用户控件给嵌入进来. 2.Partial 回传一堆html代码,直接写进到页面上@Html.Partia ...

  6. Asp.Net MVC3.0 Partial RenderPartial Action RenderAction 区别和用法

    本人写的博文不多,专业知识不强,以下纯属于个人笔记.如有不对,还请各路大拿,拍砖指导,谢谢! 区别: 1.Partial 与 RenderPartial 两个方法性质基本一样,只是把一个静态用户控件给 ...

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

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

  8. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法(mvc部分视图的添加)

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  9. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  10. asp.net MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    @Html.Action:需要有对应的Action,并且Action方法有返回值.(注:处理完业务逻辑同时,也需要返回所需值) @{Html.RenderAction}:需要有对应的Action,Ac ...

随机推荐

  1. MVC Form验证 登陆和退出Cookies的设定和消除

    红色部分为重点 1.webconfig配置  <system.web>节点下添加 <authentication mode="Forms"> <for ...

  2. java垃圾回收的回收器

    回收器的种类: --串行(–XX:+UseSerialGC ) Out ofBox算法,年轻代串行复制,年老代串行标记整理,主要用于桌面应用 --并行(–XX:+UseParallelGC ) 年轻代 ...

  3. java Foreach与迭代器

    foreach语法主要用于数组,但是它也可以用于Collection对象,下面是一个示例 package object; //: holding/ForEachCollections.java // ...

  4. javaweb笔记五

    JSP:java server page服务器脚本语言.(脚本===插件),是一种在html代码中,嵌入java代码的方式.解决servlet产生动态页面缺陷而产生的一门技术.js:客户端脚本语言js ...

  5. 无效GRANT语句导致主从同步断开

    最近遇到一个主从同步断开的案例,是由于在执行GRANT语句时,授权对象给错了,也就可以理解为无效的GRANT语句,我们收到slave库同步断开的报警信息,然后去找问题,发现binlog有报错,报错提示 ...

  6. Tomcat启动默认访问项目

    一般有两种可以实现:推荐使用这一种.更灵活 一般项目的编译项目都在Tomcat的webapps下,项目的访问路径一般为:http://localhost:8080/项目虚拟路径.但是Tomcat的默认 ...

  7. Luogu P1549 棋盘问题(2)

    题意 在N×N的棋盘上(1≤N≤10),填入1,2,-,N^2,共N^2个数,使得任意两个相邻的数之和为素数. 思路 先线性筛(非标准版),然后用a数组记录以i为下标的数是不是质数(就是标记数组),然 ...

  8. 数学之美——HMM模型(二)解码和Forward算法

    上一篇讨论了HMM的基本概念和一些性质,HMM在现实中还是比较常见的,因此也带来一了一系列的HMM应用问题.HMM应用主要面向三个方面:预测.解码和学习.这篇主要讨论预测. 简单来说,预测就是给定HM ...

  9. 前端架构之路:Windows下安装Nodejs步骤

      最近打算把我们的微信端用Vue.js重构,为什么选择Vue.js,一是之前使用的是传统的asp.net mvc,多页面应用用户体验比单页面要差.二是使用过Angular.js,感觉对开发人员要求较 ...

  10. ref:web security最新学习资料收集

    ref:https://chybeta.github.io/2017/08/19/Web-Security-Learning/ ref:https://github.com/CHYbeta/Web-S ...