asp.net MVC 4.0中总结 视图里加载部分视图几种方法

@RenderPage()

但它不能使用 原来视图的 Model 和 ViewData ,只能通过参数来传递。

 @RenderPage("~/Shared/Component/Dialog.cshtml", new { title = "Hello world!", content="Nani" })

分部视图接收数据通过Page

 <div id="dialog" title="@Page.title" style="display: none;">
<p>
@Page.title
</p>
</div>

@Html.Partial()

用于将分部视图渲染为字符串

@Html.Partial("_PartialPage1",model,ViewData)直接返回MvcHtmlString填充

 @Html.Partial("Component/Dialog", null, new ViewDataDictionary { { "title", "Hello world!" }, { "content", "Nani?" } })

Razor子视图里使用 ViewBag 来获取传递的数据

 <div id="dialog" title="@ViewBag.title" style="display: none;">
<p>
@ViewBag.content
</p>
</div>

传递强类型到部分视图

 @{
var args = new Dictionary<string,string>();
args["redirectController"] = "Admin";
args["redirectAction"] = "User";
}
6 @Html.Partial("_childPartial",args)

_childPartial.cshtml

 @model Dictionary<string,string>
<div>@Model["redirectController"]</div>
<div>@Model["redirectAction"]</div>

@RenderPartial()

将分布视图直接写入响应输出流,所以只能直接放在代码块中,不能放在表达式中(返回值是void)

RenderPartial 不需要创建 Controller 的 Action ,而 RenderAction 需要在 Controller 创建要加载的 Action。RenderAction 会先去调用 Contorller 的 Action ,最后再 呈现视图,所以这里 页面会在 发起一个链接。如果这个部分视图只是一些简单 的 html 代码,请使用 RenderPartial。 但如果这个部分视图 除了有 html 代码外,还需要 通过 读取数据库里的数据 来渲染,就必须使用 RenderAction 了,因为 它可以在 Action 里调用 Model里的 法读取数据库,渲染视图后在呈现,而 RenderPartial 没有 Action,所以无法做到。

Partial 可以直接输出内容,它内部是 将 html 内容转换为 string 字符(MVCHtmlString),然后缓存起来,      最后在一次性输出到页面。显然,这个转换的过程,会降低效率,所以通常使用 RenderPartial 代替。

@Html.Action()

实体类

 public class Menu
{
public List<MenuItem> Items { get; set; }
} public class MenuItem
{
public string Text { get; set; }
public string Url { get; set; }
}

控制器

 public ActionResult MyMenu()
{
MvcLearn.Models.Menu m = new MvcLearn.Models.Menu();
List<MvcLearn.Models.MenuItem> items = new List<MenuItem>();
items.Add( new MenuItem(){ Text = "Baidu", Url = "http://www.baidu.com"});
items.Add(new MenuItem() { Text = "Sina", Url = "http://www.Sina.com" });
items.Add(new MenuItem() { Text = "IBM", Url = "http://www.ibm.com" });
items.Add(new MenuItem() { Text = "Sohu", Url = "http://www.sohu.com" });
m.Items = items;
return PartialView(m);
}

建立一个PartialView - MyMenu.cshtml

 @model MvcLearn.Models.Menu
<ul>
@foreach(var item in Model.Items)
{
<li><a href="@item.Url">@item.Text</a></li>
}
</ul>

在页面中调用该Action生成视图:

@Html.Action("MyMenu")

调用Action时传入参数

 @Html.Action("MyMenu", new { mi= new MvcLearn.Models.MenuItem(){ Text = "haha", Url =<a href="http://www.ms.com">http://www.ms.com</a>}})

@Html.RenderAction()

@{Html.RenderAction("MyMenu")}

Action 也是直接输出,和 Partial 一样,也存在一个转换的过程。不如 RenderAction 直接输出到 当前HttpContext 的效率高。

最新文章

  1. QGEditors.WinForms WinForms下使用的部分扩展控件
  2. 字符串与json对象之间转换
  3. Samba 4 Domain Controller on Ubuntu 14.04 LTS
  4. CI框架(一)
  5. 用Maven生成Eclipse中的Web项目
  6. Tomcat启动时报错,Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext
  7. cinder backup
  8. C陷阱与缺陷 1
  9. Java Language and Virtual Machine Specifications
  10. 机器学习 —— 概率图模型(学习:CRF与MRF)
  11. win7硬盘安装Ubuntu12.04 64位时显示Error 15: File not found.
  12. Extjs3 Combo实现百度搜索查询
  13. 关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析
  14. hibernate_validator_10
  15. C#实现多态之一抽象
  16. So, you think you know JavaScript?
  17. springmvc+swagger构建Restful风格文档
  18. 安装Conda并在Conda下安装jupyter notebook
  19. kettle性能优化
  20. ntp测试

热门文章

  1. POJ3237 Tree(树剖+线段树+lazy标记)
  2. 构建基于虚拟用户的vsftpd服务器
  3. HTML Document 头
  4. JQuery Mobile的页面
  5. jQuery之简单的表单验证
  6. zynq基础
  7. ASP.NET Core分布式项目实战
  8. 2019年第十届蓝桥杯国赛总结(JavaA组)
  9. Fiddler如何抓取HTTPS协议的网页
  10. npm ERR! Cannot read property &#39;match&#39; of undefined 错误处理