asp.net MVC 4.0 View回顾——布局页与分部页

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

@RenderPage()

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


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

分部视图接收数据通过Page


1 <div id="dialog" title="@Page.title" style="display: none;">
2 <p>
3 @Page.title
4 </p>
5 </div>

@Html.Partial()

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

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


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

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


1 <div id="dialog" title="@ViewBag.title" style="display: none;">
2 <p>
3 @ViewBag.content
4 </p>
5 </div>

传递强类型到部分视图


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

_childPartial.cshtml


1 @model Dictionary<string,string>
2 <div>@Model["redirectController"]</div>
3 <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()

实体类


 1 public class Menu
2 {
3 public List<MenuItem> Items { get; set; }
4 }
5
6 public class MenuItem
7 {
8 public string Text { get; set; }
9 public string Url { get; set; }
10 }

控制器


 1 public ActionResult MyMenu()
2 {
3 MvcLearn.Models.Menu m = new MvcLearn.Models.Menu();
4 List<MvcLearn.Models.MenuItem> items = new List<MenuItem>();
5 items.Add( new MenuItem(){ Text = "Baidu", Url = "http://www.baidu.com"});
6 items.Add(new MenuItem() { Text = "Sina", Url = "http://www.Sina.com" });
7 items.Add(new MenuItem() { Text = "IBM", Url = "http://www.ibm.com" });
8 items.Add(new MenuItem() { Text = "Sohu", Url = "http://www.sohu.com" });
9 m.Items = items;
10 return PartialView(m);
11 }

建立一个PartialView - MyMenu.cshtml


1 @model MvcLearn.Models.Menu
2 <ul>
3 @foreach(var item in Model.Items)
4 {
5 <li><a href="@item.Url">@item.Text</a></li>
6 }
7 </ul>

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

1 @Html.Action("MyMenu")

调用Action时传入参数


1 @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()

1 @{Html.RenderAction("MyMenu")}

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

时间: 2024-09-30 13:19:54

asp.net MVC 4.0 View回顾——布局页与分部页的相关文章

asp.net MVC 4.0 Controller回顾——ModelBinding过程

以DefaultModelBinder为例 为简单模型绑定(BindSimpleModel)和复杂模型绑定(BindSimpleModel) 1 public virtual object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 2 { 3 if (bindingContext == null) 4 { 5 throw new ArgumentNullException(

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的界面呈现工作是由浏览器完成的,Web应用的原理是通过Http协议从服务器上获取到对应的Html代码以及相关资源,使得浏览器能够完成正确的呈现工作. ASP.NET MVC作为一个Web应用构建框架View承担了UI显示的功能,在开发过程中View以Action的名称命名,当用户的请求被路由到某一Action方法时,ASP.NET MVC将会根据Action的名称来获取到对应的V

asp.net mvc 3.0 知识点整理 ----- (2).Controller中几种Action返回类型对比

通过学习,我们可以发现,在Controller中提供了很多不同的Action返回类型.那么具体他们是有什么作用呢?它们的用法和区别是什么呢?通过资料书上的介绍和网上资料的查询,这里就来给大家列举和大致的概括下. (1). ActionResult(base):最基本的Action类型,返回其他类型都可以写ActionResult. (2). ContentResult:返回ContentResult用户定义的内容类型. public ActionResult Content() { return

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 概述      众所周知,ASP.Net MVC程序在浏览器运行时产生了标准的Html标签,包括浏览器要发送的关键数据等内容都在Html内容里面,听起来不错,但是假如我们仿造类似的Html内容,更改里面关键数据,在浏览器运行起来会怎么样呢?好下面我们就做这样一个例子.       CSRF攻击例子 首先我们拿以前做好的person/edit作为例子 先看控制器代码 //初始页面        

ASP.NET MVC 4.0 升级到 5.0遇到的问题及解决思路

先说一下项目的情况 这个项目是公司的一个官网,之前同事写的,用的.NET 和ASP.NET MVC 4.0的.我用的新开发环境是VS2015,在原来的项目基础之上不能创建新的Controller.我就自定义一个Controller类,集成Controller,也可以创建View.调试运行都可以.后来想尝试局域网环境发布,用的是VS自带的发布功能.供公司其他同事浏览,发现一个问题:新建的Controller相关页面和在原有Controller里创建的页面都没有生成,就是没有发布成功.一开始还没注意

asp.net mvc 3.0 知识点整理 ----- (4).HtmlHelper(Html 辅助方法)介绍

在View视图中,Html的类型是System.Web.Mvc.HtmlHelper<T>, 所有的辅助方法都需要和ModelState交互.那么,ModelState是什么呢?它是模型绑定的附属品,并且存有模型绑定期间检测到的所有验证错误.以及用户提交用到来更新模型的原始值.本篇博文,我们主要来介绍下一些常用的html辅助方法的主要作用和使用方法. 1. Html.BeginForm()和Ajax.BeginForm().   Html.BeginForm(): 同于传统的表单提交,主要是生

ASP.NET MVC 4.0的Action Filter

有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你自定义创建action过滤器.Action过滤器是自定义的Attributes,用来标记添加Action方法之前或者Action方法之后的行为到控制器类中的Action方法中. 什么情况下可能会用到action过滤的地方: 日志,异常处理 身份验证和授权 - 限制用户的访问 输出缓存 - 保存一个Action的结果 网络爬虫的过滤 本地化 动态Action - 将一个Action注

(转)ASP.NET Mvc 2.0 - 1. Areas的创建与执行

转自:http://www.cnblogs.com/terrysun/archive/2010/04/13/1711218.html ASP.NET Mvc 2.0 - 1. Areas的创建与执行 Areas是ASP.NET Mvc 2.0版本中引入的众多新特性之一,它可以帮你把一个较大型的Web项目分成若干组成部分,即Area.实现Area的功能可以有两个组织形式: 在1个ASP.NET Mvc 2.0 Project中创建Areas. 创建多个ASP.NET Mvc 2.0 Project

ASP.NET MVC 4.0 学习2-留言板實現

新增專案實現留言板功能,瞭解MVC的運行機制 1,新增專案   2,添加數據庫文件message.mdf   Ctrl+W,L 打開資料庫連接,添加存放留言的Atricle表 添加字段,後點擊"更新"後看到新增的Atricle表(Content 應該設置為text) 3,添加ADO.NET實體數據模型 (MVC通過實體數據模型對數據庫中的數據進行增删改查)              ADO.NET實體數據模型添加完成. 4,建立Service 我們把對Model中message.mdf