MVC KT

 

  1. 1.      ASP.NET MVC 请求流的通用步骤:

Step 1:首先获取控制器。

Step 2:依赖行为控制器创建Model对象,Model通过转换调用数据访问层。

Step 3:数据填充Model之后,传递到View 显示层,实现显示的目的。

                       

        public string GetSky()

        {

            return "sky" +"<br> is a boy </br>";   //直接可以返回字符串与Html 编码

        }

 

        public string GetUser()

        {

            User u = new User();

            u.UserID = "100";

            u.UserName = "sky";

            return u.ToString(); // 也可以直接返回对象

        }

        public ActionResult GetView()

        {

            return View("SkyView"); // 也可以返回页面

        }

 

 

 

 

 

 

 

  1. 2.      View函数的功能是什么?

         创建 ViewResult 对象将会渲染成视图来给用户反馈

 

  • ViewResult 创建了ViewPageActivator 对象
  • ViewResult 选择了正确的ViewEngine,并且会给ViewEngine的构造函数传ViewPageActivator对象的参数
  • ViewEngine 创建View类的对象
  • ViewEngine 调用View的RenderView      方法。

 

ActionResult ViewResult的关系是什么?

ActionResult是抽象类,而ViewResult是ActionResult的多级孩子节点,多级是因为ViewResult是ViewResultBase的子类,而ViewResultBase是ActionResult的孩子节点

 

什么是ContentResult

ViewResult是HTML响应而ContentResult是标准的文本响应,仅返回字符串类型。区别就在于ContentResult是ActionResult的子类。

 

 

 

 

 

 

 

 

 

 

 

ViewBag可以称为ViewData的一块关于语法的辅助的糖果,ViewBag使用C# 4.0的动态特征,使得ViewData也具有动态特性。

ViewDataViewBag对比:

ViewData

ViewBag

它是Key/Value字典集合

它是dynamic类型对像

从Asp.net   MVC 1 就有了

ASP.NET MVC3 才有

基于Asp.net   3.5 framework

基于Asp.net   4.0与.net framework

ViewData比ViewBag快

ViewBag比ViewData慢

在ViewPage中查询数据时需要转换合适的类型

在ViewPage中查询数据时不需要类型转换

有一些类型转换代码

可读性更好

ViewBag内部调用ViewData。

 

.cs

        public ActionResult GetBagView()

        {

            User u = new User();

            u.UserID = "300";

            u.UserName = "sky300";

            ViewBag.User = u;

            return View("BagView");

        }

CSHTML

 

        @{

            _001HelloWorld.Controllers.User emp = (_001HelloWorld.Controllers.User)ViewBag.User;

           

            }

 

        UserName=@emp.UserName;

 

 

强类型模型,和@model关键字

我们之前有讲过ViewBage是一个动态对象,可以把数据或对象从Controller传递到View中。

ASP.NET MVC同样提供了强类型(strongly typed data)到view template.这种强类型VS 这种脚手架机制(scaffolding mechanism),在ControllerMethods中和View TemplateViews中都有体现。

现在我们先来看看Controller中自动生成的code

 // GET: /Movies/Details/

        //以下方法,从实例化后的Movie对象中读取Movie数据

        public ActionResult Details(int id = 0)

        {

            //如果id对应的Movie找到,则Return到Detail.cshtml中

            Movie movie = db.Movies.Find(id);

            if (movie == null)

            {

                return HttpNotFound();

            }

            return View(movie);

        }

然后转到View 中的Details.cshtml看一下,第一行:

@model MVCMovie.Models.Movie //没有分号。。。。

Detail.cshtml最上面的这一行的声明(Statement),指定了object是View可以接受的类型

@model指令,对Model对象强制类型转换,把ControllerModel中获取的数据传递到View Template中 中,仅仅接受这一个Model

设置强类型的View是最佳解决方案。  @model   这是一个语法。

是否能将View设置为多个Model使用的强类型?

不可以,实际项目中在一个View中想要显示多个Model时以点结束的,而数据是存放在大的Model中的。

 

 

 

 

理解ASP.NET MVC 中的View Model

实验5中已经违反了MVC的基本准则。根据MVC,V是View纯UI,不包含任何逻辑层。而我们在实验5中以下三点违反了MVC的体系架构规则。

1. 附加姓和名显示全名——逻辑层

2. 使用货币显示工资——逻辑层

3. 使用不同的颜色表示工资值,使用简单的逻辑改变了HTML元素的外观。——逻辑层

ViewModel 解决方法

ViewModel是ASP.NET MVC应用中隐式声明的层。它是用于维护Model与View之间数据传递的,是View的数据容器。

Model ViewModel 的区别

Model是业务相关数据,是根据业务和数据结构创建的。ViewModel是视图相关的数据。是根据View创建的。

具体的工作原理

  1. Controller 处理用户交互逻辑或简单的判断。处理用户需求
  2. Controller 获取一个或多个Model数据
  3. Controller 决策哪个View最符合用户的请求
  4. Controller 将根据Model数据和View需求创建并且初始化ViewModel对象。
  5. Controller 将ViewModel数据以ViewData或ViewBag或强类型View等对象传递到View中。
  6. Controller 返回View。

View ViewModel 之间是如何关联的?

View将变成ViewModel的强类型View。

Model ViewModel 是如何关联的?

Model和ViewModel 是互相独立的,Controller将根据Model对象创建并初始化ViewModel对象。

 

posted @ 2016-06-23 17:39  光阴的故事-SKY  阅读(136)  评论(0编辑  收藏  举报