[转载]ASP.NET MVC 3的分部视图
1、什么是分部视图,我们应该什么时候应该用?
<div>
@Html.Partial("_FeaturedProduct")
</div>
<div>
@Html.RenderPartial("_FeaturedProduct")
</div>
使用Html.RenderPartial流图像或其他元素,媒体中心或更快的下载时间是非常重要的。
3、创建一个局部视图
不管是主视图还是分部视图都是.cshtml 的文件,其中分部视图的不同之处是在于文件放在:\Views\Shared\ 文件下。通过在解决方案资源管理器上下文菜单中使用“添加新视图”对话框来访问\Views\Shared 文件节点。添加新的视图模板“对话框提供了用于创建您的部分视图,特别注意,包括选项的选择。不要忘记检查“作为一个局部视图”创建或你会结束大量的代码删除。

一旦你创建的视图,你可以开始通过简单的编辑文件定制。删除或修改视图的代码捆绑在一起。下面所示的代码(_FeaturedProduct.cshtml)是默认视图模板创建相同的代码,我们可以修改,以显示不同的特色产品:

<style type="text/css">
.featuredProduct {border: solid 1px #000}
</style>
<div>
<div>
<h2>
Our Featured product:<br />
@ViewBag.FeaturedProduct.Name
</h2>
</div> <div>
<h3>
Now discounted to $@String.Format("{0:F}", ((decimal)ViewBag.FeaturedProduct.Price)-100)
</h3>
</div>
<div>
@Html.ActionLink("Featured Product Details", "Details", new { id = ViewBag.FeaturedProduct.ProductId })
</div>
<div>
<img class="featuredProduct" src="@Href("~/Content/Images")/@ViewBag.FeaturedProduct.ImageName" alt="Featured Product"/>
</div>
</div>

和强类型一样,强类型分部视图也支持点标记语法和访问模型,ViewBag,ViewData的其他类,并专门设计数据共享。
我们阅读上面的代码,我们应该很明确,分部视图和常规视图的语法没有区别。
重要的是没有相关语法关于如何使用分部视图。然而,考虑分部视图和常规视图之间的一致性,特别是当我们需要在它们之间共享数据。
4、主视图与分部视图的数据共享
应用程序组件之间的数据传递,这是一个普遍的现象,MVC,视图和控制器这些组件也一样。 如前所述,你可以使用ViewBag或ViewData的类进行数据的共享。首先,介绍ViewBag的ViewData几个关键字:
ViewData的是以前发布的版本的;,ViewBag与MVC3一起发布的。
ViewData的可以包含任何类型的数据在一个键—值对格式。即,ViewData["Message"] = "Welcome";
ViewBag对象的ViewData对象的包装,并允许开发人员编写他们使用强类型的语法。
ViewBag对象可以通过简单地设置在一个更流畅的语法属性扩展。即· ViewBag.Customer = new Customer(1,"Smith");
如果在一个控制器的代码使用ViewBag,或ViewData的类,这些类将可视图的整个生命周期,而且包括其分部视图。
可取的对象是的ViewBag。由于其更加流畅和动感的语法,还有复杂的对象可以很容易地在组件之间共享。下面的示例演示设置在控制器的ViewBag对象,它会提供所有必要的组件:

ProductModel productModel = new ProductModel();
public ActionResult Index()
{
ViewBag.FeaturedProduct = new FeaturedProduct(105, "The Most Awesome Bike Ever!", 1000.00M, "bike4.png");
return View(productModel.Products);
}

访问视图里面的ViewBag或部分使用语法如下:
@ViewBag.FeaturedProduct.Name
5、总结
部分视图重用HTML和Razor 语法,具有很好的数据共享。
6、资料来源
Introducing MVC Development w/the Razor View Engine
原文地址:http://www.cnblogs.com/tzh521241/archive/2012/07/22/ASPNETMVC.html
[转载]ASP.NET MVC 3的分部视图的更多相关文章
- 如何应用ASP.NET MVC中的分部视图
概述: 在ASP.NET Web Form的开发经验中,对于User Control使用比较频繁,可以减少重复的代码,利于页面模块化,这个概念也被引入了ASP.NET MVC.即“分部视图”. 1.创 ...
- MVC中使用分部视图参数,改变分部视图连接样式
MVC中使用分部视图参数,改变分部视图连接样式! Controller代码 [ChildActionOnly] public ActionResult Navigator(int tag) { ret ...
- ASP.NET MVC传递Model到视图的多种方式总结
ASP.NET MVC传递Model到视图的多种方式总结 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData ViewModel T ...
- ASP.NET MVC传递Model到视图的多种方式之通用方式的使用
ASP.NET MVC传递Model到视图的多种方式总结——通用方式的使用 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData Vi ...
- [转载] ASP.NET MVC (一)——深入理解ASP.NET MVC
个人认为写得比较透彻得Asp.net mvc 文章,所以转载过来,原文链接在最后: ASP.NET vs MVC vs WebForms 许多ASP.NET开发人员开始接触MVC认为MVC与ASP.N ...
- 转载——Asp.Net MVC+EF+三层架构的完整搭建过程
转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...
- 爱上MVC~ajax调用分部视图session超时页面跳转问题
回到目录 这个问题出现了很多年了,都没有解决,问题是这样的,有一个需要授权才可以访问的分部视图,在一个view中使用ajax的方法去调用它,然后更新页面的局部DIV,这时,如果你长时间不操作,sess ...
- asp.net mvc 中的部分视图
使用方法:@Html.Action(action, controller)加载局部页面.例如在模板页中使用:@Html.Action("Contact", "Compan ...
- ASP.NET MVC 之控制器与视图之间的数据传递
今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, ...
随机推荐
- C#保存上传来的图片示例代码
保存上传图片的方法有很多,在接下来的文章中为大家详细介绍下使用C#是如何做到的,感兴趣的朋友不要错过 复制代码代码如下: [HttpPost] public string UploadImage() ...
- 自定义ListView适配器
继承BaseAdapter类 覆盖以下4个方法: @Override public int getCount() { return users.size(); } @Override public O ...
- 和阿文一起学H5——音乐素材
国内 1.网易云音乐 http://music.163.com/ 网易云音乐有听歌识曲功能,听几秒中可听出是什么歌. 微信摇一摇也有听歌识曲功能. 2.只要伴奏不要人声 http://5sing.ku ...
- fuse挂载hdfs目录到linux本地
1,安装fuse yum -y install hadoop-hdfs-fuse 2.修改环境变量 vi /etc/profile 增加如下配置: JAVA_HOME=/usr/jdk64/jdk1. ...
- C# DateTime格式化
DateTime. ToString() -- :: ToBinary() - ToFileTime() ToFileTimeUtc() ToLocalTime() -- :: ToLongDateS ...
- android结束进程、退出application的方法
1.finish()方法 finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:调用finish()方 ...
- Objective-C 【多个对象内存管理(野指针&内存泄漏)】
------------------------------------------- 多个对象内存管理(野指针&内存泄漏) (注:这一部分知识请结合"单个对象内存管理"去 ...
- Js 赋值传值和引用传址
赋值传值和引用传址 在JavaScript中基本数据类型都是赋值传值,复合数据类型都是引用传址(传地址) 基本数据类型的变量名和数据是直接存在"快速内存"(栈内存)中,而复合数据类 ...
- jQuery 日历控件 FullCalendar 初识
最近有个日程管理的需求,就学习了一下 FullCalendar 控件的一些基本知识,本文不是详细介绍该控件的 API 的文档,而是记录本人使用过程中的一些学习情况. 先看一下效果图 月/周/日视图 ...
- 【CLR VIA C#】读书笔记
工作几年了才看,记录下笔记备忘. 章节 笔记 1.CLR的执行模型 公共语言运行时(Common Language Runtime,CLR) 源代码-->编译器检查语法和分析源代码-->托 ...