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

来源:互联网 发布:芒果tv软件下载 编辑:程序博客网 时间:2024/04/27 02:43

概述

 

在模型-视图-控制器 (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里面新增的部分。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4个月母乳不足怎么办 宝宝四个月奶不够怎么办 四个月宝宝奶不够吃怎么办 宝宝吃母乳偏瘦怎么办 宝宝吃母乳很瘦怎么办 8个月宝宝流汗太多怎么办 奶水多乳房胀疼怎么办 乳房胀奶奶水减少怎么办 宝宝五个月奶水不够吃怎么办 梦见鬼在梦里怎么办 宝宝晚上奶水不够吃怎么办 十个月晚上奶水不够吃怎么办 产妇晚上奶水不够吃怎么办 刚出生的宝宝不吃母乳怎么办 宝宝六个月奶不够吃怎么办 六个月奶不够吃怎么办 刚出生奶不够吃怎么办 做梦醒了看见鬼怎么办 宝宝到陌生地方哭闹怎么办 大人生病住院小孩没人带怎么办 孕妇被小猫抓了怎么办 怀孕了家里有猫怎么办 厕所被湿纸巾堵了怎么办 5天新生儿不拉屎怎么办 4月宝宝不拉屎怎么办 两岁宝宝晚上睡觉哭闹怎么办 2月婴儿吐奶很多怎么办 心情不好回奶了怎么办 四个月了没奶怎么办 八岁宝宝还尿床怎么办 自己一人在家害怕怎么办 被猫抓伤流血了怎么办 被小狐狸咬了怎么办 怀孕吃了兔子肉怎么办 鸟总在窗子上啄怎么办? 有鸟飞进楼道里怎么办 租的房间房东要求改建怎么办 小偷偷钱抓住不还钱怎么办 损友圈羊被陌生人偷了怎么办 在酒店如果遇到客人偷东西怎么办 梦见家里有不好的东西怎么办