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