我要学ASP.NET MVC 3.0(六): MVC 3.0创建你的View视图

概述

 

在模型-视图-控制器 (MVC) 模式中,视图专门用于封装呈现逻辑。 这些视图不应包含任何应用程序逻辑或数据库检索代码。 所有应用程序逻辑都应该由控制器进行处理。 视图使用从控制器传递给它的数据来呈现相应的 UI。 此数据是使用 View 方法从控制器操作方法中传递给视图的。

在 MVC Web 应用程序的普通工作流中,控制器操作方法将处理传入的 Web 请求。

这些操作方法使用传入的参数值执行应用程序代码以及检索或更新数据库中的数据模型对象。 然后,这些方法会选择一个将响应呈现到浏览器的视图。

MVC 3.0视图引擎

 

MVC 3.0为我们提供了两种视图引擎ASPX(C#)和Razor(CSHTML)

ASPX(C#)引擎

ASP.NET MVC 框架支持使用视图引擎生成视图 (UI)。 默认情况下,MVC 框架使用从现有 ASP.NET 页面 (.aspx)、母版页 (.master) 和用户控件 (.ascx) 类型中继承的自定义类型(ViewPageViewMasterPageViewUserControl)作为视图。

Razor(CSHTML)引擎

 

_appstart.cshtml : 

应用程序启动时在Global. Application_Start方法后执行。

用于进行App的初始化时,需要进行处理的内容.例:向数据库记录系统初始化的一些信息。
功能与Global.Application_Start类似,差别在于:Global的Start先执行,然后在到该_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynamic新特性~~在声明中,作为属性、字段、索引器、参数、返回值或类型约束的类型。

_Layout.cshtml:

布局页面即和aspx的母版页相似。

创建MVC视图(Razor引擎)

 

建立一个基于Razor引擎空的MVC 3.0空应用程序

选择空项目模板和Razor视图引擎

 

新建一个Controller命名为HomeController

鼠标右击 Controller文件夹

 输入Controller名称。注意必须以Controller结尾。

添加完控制器后默认给出了起Index的方法。。。

此时我们没有创建对该Action对应的View,所以View是红色的。。。运行时界面会报错。。

        public ActionResult Index()
{
return View();
}

我们先让他输出一个字符串到页面。。。

将代码

        public ActionResult Index()
{
return View();
}

修改为

        public string Index()
{
return "Hello World";
}

运行之后 一个简单的界面就出现了 。。。

添加View

 

此时我们只是单纯的显示了一些字符串而已。但是我们的界面还需要很多元素不仅仅是文字。。

所以我们还是得从View视图下手。。

返回到前面的

        public ActionResult Index()
{
return View();
}

修改前面的代码让Controller的Index返回一个ActionResult

对于ActionResult请参见:我要学ASP.NET MVC 3.0(五): 入手Controller/Action

右击该Action弹出窗体 ---选择添加视图

 建议不要修改视图名称,后续会慢慢解释

此时在View文件夹中会对应Controller生成一个Action对应的View视图

在视图里面编写html代码

 

@{
ViewBag.Title = "主页";
}

<h2><a href="Index">Hello World</a></h2>
 
运行效果

 
控制器和视图之间传递的数据
 
很多时候我们要把一些数据传递到界面上来。就像Web的Session
代码如下
        public ActionResult Index()
{
ViewData[
"Message"] = "Hello World";
return View();
}

View修改为

@{
ViewBag.Title = "主页";
}

<h2><a href="Index">@ViewData["Message"]</a></h2>

运行效果还是一样的。。。

关于TempData 、ViewBag和ViewData

 

其实我个人觉得他们都是一样的。

如果你使用的TempData 、ViewData用ViewBag的方式调用也是一样的效果

反之亦然。。。

例如:ViewBag.Message和ViewData["Message"]

        public ActionResult Index()
{
ViewBag.Message
= "Hello World";
// ViewData["Message"] = "Hello World";
return View();
}

View代码不变运行效果一样。。。反复调试效果都是一样的。。

TempData、ViewData和ViewBag异同:

 

TempData ViewData ViewBag都可以用来保存数据。
 
它们之间的区别如下:
 
TempData:保存在Session中,Controller每次执行请求的时候,会从Session中先获取TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删除。具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。
ViewData:生命周期和View相同,仅对当前View有效。
ViewBag:和ViewData生命周期相同,也是对但前View有效,不同的是ViewBag的类型不再是字典的键值对结构,而是dynamic动态类型,属于MVC3里面新增的部分。
 
总结
 
刚开始接触也谈不上总结。以后学的差不多了再补回来。。(*^__^*) 嘻嘻
 
下节预告
 
新来的Razor
 


作者:记忆逝去的青春
出处:http://www.cnblogs.com/lukun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过http://www.cnblogs.com/lukun/  联系我,非常感谢。

posted on 2011-07-27 16:43  记忆逝去的青春  阅读(10382)  评论(2编辑  收藏  举报