ASP.NET MVC 3的分部视图

转载 2013年12月05日 09:20:35

1、什么是分部视图,我们应该什么时候应该用?

作为一个对ASP.NET MVC 模型很熟悉的开发者,他们自然想创建一个内容和代码都可以重用的组件,在web 窗体,我们可以创建一个web用户控件或web服务器控件。但是在MVC,我们应该用分部视图,在这个概念的角度看,对任何情景的应用情景都应该有用。
 
在应用程序中,每一页上都显示这个股票行情
在应用程序中,一个日历控件显示在多个页面中
一个登录框
用于在多个页面上的社交网络组件,如Facebook的Like按钮。
 
虽然ASP.NET MVC 的分部视图,在语法和功能这两个不同的角度,理论上可以理解为用户控件。WEB用户控件在WEB窗体中使用ViewState、PostBacks, and Events 。而在MVC的分部视图,不使用任何上述技术管理状态。正如ASP.NET Web用户控件做的,分部视图,可以挖掘到你的应用程序以及其他应用程序组件之间的数据共享中的模型。
 
2、分部视图的渲染
在ASP.NET MVC3的分部视图周昂,允许开发人员用精确和简洁的Razor syntax语法(或ASPX)创建可重复使用的内容模块。呈现分部视图的语法被作为一个HTML辅助实现。
 Html.Partial辅助呈现分部视图名为“_FeaturedProduct”内联。所有重载方法的第一个参数为@Html.Partial 你期望的视图名称或者分部视图的名字,没有文件扩展名。
 
例如,一个@Html.Partial辅助假定视图放在 \Views\Shared\ 的文件夹下。其他的 @Html.Partial方法重载允许你在各个视图之间传递ViewData或者 ViewBag对象.
下面的代码演示调用呈现分部视图的特点。
 
<div>
  @Html.Partial("_FeaturedProduct")
</div>

 

 

分部视图可以在Layout Page布局页面呈现。
也有一些情况下,你可能要另外一种方式实现,比如直接写入HTTP响应流,而不是局部视图渲染结果。
 
<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 Razor

Introducing MVC Development w/the Razor View Engine

Razor View Syntax

MVC-Razor分布视图

什么是分布视图? Mvc时代的分部视图,web form时代的对应物ascx分部控件。当然MVC对分布视图具有更强的控制能力。 分布视图的优点? 1、分布视图可以使系统插件化(各个功能模块都是独立的...
  • u010540106
  • u010540106
  • 2014年12月21日 22:14
  • 2884

asp.net MVC 中呈现指定区域下的分部视图

Html.RenderAction() 可以呈现分部视图。asp.net MVC就是有这种好处,可以将多个子视图无缝合成到一个视图上再输出,那么开发的时候,能够进行模块化开发。看上去同属一个页面上的东...
  • leftfist
  • leftfist
  • 2015年10月08日 11:55
  • 3425

ASP.NET MVC异步加载分部视图

在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同时它还有个兄弟PartialViewResult,相信聪明的你已经知道了它俩的区别了,没错...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:23
  • 2349

ASP.NET MVC 分部页 PartialViewResult

PartialViewResult返回的也是一个页面,可以使用@Html.Partial加载这个部分页面,需要多次使用的时候可以用到他 public PartialViewResult _pxcx...
  • aojiancc2
  • aojiancc2
  • 2015年10月13日 14:40
  • 1924

ASP.NET MVC公共模板、节、分部视图等

一、公共模板  1、@RenderBody()  在网站公用部分通过一个占位符@RenderBody()来为网站独立部分预留一个位置。然后私有页面顶部通过@{Layout="公用模板路径"}来引入公用...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:23
  • 1776

MVC中的分部视图

在一定程度上,分部视图与用户控件十分类似。他们都可以提高内容或代码的可重用性,但不同之处是,分部视图不需要使用ViewState、PostBacks, and Events 等技术管理状态。分部视图与...
  • u010066934
  • u010066934
  • 2014年12月23日 15:55
  • 2495

ASP.Net MVC开发基础学习笔记(10):分部视图PartialView

前言 本节我们来看分部视图PartialView的用法。首先我们会创建一个简单的静态分部视图。然后向这个视图中传入Model数据,使其变成动态分部视图。接下来介绍使用ChildAction来调用分部视...
  • mss359681091
  • mss359681091
  • 2016年04月18日 17:06
  • 7388

MVC3分部视图

说到mvc3中的分部视图,不禁联想到webform里面的ascx分部控件,我们在MVC时代可以更加轻松的控制分部视图。MVC中主要分为两大类的分部视图,分别是Html.Partial(partialN...
  • wangboxian
  • wangboxian
  • 2014年12月25日 09:53
  • 6438

MVC-Razor分布视图

什么是分布视图? Mvc时代的分部视图,web form时代的对应物ascx分部控件。当然MVC对分布视图具有更强的控制能力。 分布视图的优点? 1、分布视图可以使系统插件化(各个功能模块都是独立的...
  • u010540106
  • u010540106
  • 2014年12月21日 22:14
  • 2884

ASP.NET MVC3调用分部视图-PartialView的几种方式(集)

我们的网页通常会有好几个部分组成,一些公共的区域我们通常会做成PartialView(部分视图),但这些视图并不是完全固定的,所以还是需要 特定的Controller来控制。如果只是静态的html,...
  • stwuyiyu
  • stwuyiyu
  • 2013年04月29日 09:32
  • 1622
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET MVC 3的分部视图
举报原因:
原因补充:

(最多只允许输入30个字)