2_MVC简单概念的介绍

来源:互联网 发布:mac 两个窗口并排 编辑:程序博客网 时间:2024/06/18 11:26

MVC概念简介


MVC的三大组件

1 三大组件(控制器,视图,模型)

  • 控制器(Control):处理用户的输入,负责改变模型的状态并选择适当的视图来显示模型的数据
  • 视图(View):就是用于显示模型中数据的用户界面,显示的内容形式在这里定义。
  • 模型(Model):MVC需要提供的数据源,负责数据的访问和维护,一般对应数据库中的表,用于对数据库表中的内容的同步。

2 组件之间交互
MVC

  • 从上图中可以看出,MVC从用户发送请求到页面呈现结果大致经历了五个步骤,分别如下:
    • 用户在浏览器输入地址,向页面发送请求(实则是向控制器发出相关命令);
    • 控制器接受命令后,向模型请求获得相关的数据;
    • 模型将相应的数据返回给控制器;
    • 控制器将相关数据发送到指定的视图;
    • 指定的视图呈现相关的数据。
  • 其中控制器可以向模型输入数据,并利用2*步骤同步到数据库中,也可以利用3*步骤从数据库中取出信息存放到Model中,在返回给控制器。
  • 从这五个步骤中,发现控制器起着承上启下的中枢作用,职责变得更加明晰,这也就是开发者主要关注的组件了。

MVC在ASP.NET中的Demo


实际项目中的目录结构

  • 首先.NET MVC是一种约定优于配置的技术,不管是项目的目录结构还是文件名,Model类中字段等都有默认的约定。

    • 结构

    • App_Start:存放了4以前的版本中会在Global.aspx中定义的路由配置,过滤器配置以及WebApi配置,并作为一个单独的cs文件存在。

    • App_Data:存放的是数据库的文件,本文采用外置Sql Server这里就不用关注。
    • Content:存放CSS、图片等静态资源文件。
    • Controllers: 存放一系列以***Controllers命名的控制器组件,执行与模型和视图的交互,一般业务会提取到业务逻辑层中,而在Control 中只是调用业务逻辑层进行处理。
    • Models: 存放Linq to SQL或ADO.NET Data Entity Model等模型组件和对应数据库中的表的实体类,而数据操作,一般会提取到数据访问层中。

    • Scripts: 存放应用程序必须的Javascript文件。

    • Views: 存放与Controllers在与方法对应的视图,注意:如果存在***Controllers控制器,在Views中就必然会映射一个***命名的文件夹。在Views之下的Shared则存放视图组件的公共部分,这部分可以作为公共模板页,供其它视图的页面继承。

项目中的交互流程

  • 我们可以查看App_Start文件夹下的RouteConfig.cs文件,里面定义了项目的默认路由以及路由默认的访问方式(Url)。
    路由
    有图看出:默认访问的是Home控制器的Index action。访问的默认Url是:controller/action/id

  • 这个时候我们并不真正建立数据库,只是建立Model,现在Model中建立一个User的类,(会通过下文EF进行数据库的映射)

namespace GradeMIS.Models{    public class User    {        public int UserId { get; set; }        public String UserName { get; set; }        public String UsePasswd { get; set; }    }}

以上简单定义了User的Model类,用来描述Mvc的过程。

  • 接下来我们可以建立一个Controller:HomeController
  • 在controller文件夹上右键,添加,控制器,改名称,空模板
namespace GradeMIS.Controllers{    public class HomeController : Controller    {        public ActionResult Index()//action        {            //模拟            User user=new User();            user.Name="测试数据";                       return this.View(user);        }    }}
  • 上述代码创建了一个HomeController,默认建立了一个Index的Action,Action中,得到一个User Model类,将结果返回到视图,并将user传递过去了,返回值ActionResult,他有很多子类。

  • 子类
    你可以根据返回的内容确定返回值。比如我们返回的是页面,便可以使用ViewResult。

  • 接下来我们就可以建立一个视图

    • 在控制器空白处右键,添加视图(AddView)
    • 添加视图
      便会弹出上面的页面,让你设置1:视图名称,与对应的Action名称相同
      2 :页面解析引擎是Razor,就是创建cshtml页面;3:创建一个强类型的视图,就是定义我们从控制器传过去的对象的类型;4:模板代码,我们传递过去是显示详情,还有其他模板:创建,删除,遍历,修改等。
      5:使用布局模板页,使本页面集成模板页面布局,不设定将采用默认在_viewstart文件中的设定。

    • 然后再视图页面就可以显示我们传递过去的信息

@model GradeMIS.Models.User//强类型@{    ViewBag.Title = "详细信息";//页面标题    //Layout = "~/Views/Shared/_Layout.cshtml";定义的是布局页面}...
  • 这个时候你运行,访问,就会默认访问HomeController的Index action然乎跳转到Home文件夹下的Index视图显示信息。

小结


1 本文讲解了MVC的架构,以及在VS中演示了MVC运行的流程,从用户发送请求到控制器,控制器通过MODEL与数据库进行交互,再将结果传递给视图,视图定义显示的样式,将结果呈现给用户。

2 参考资料

  • MVC底层运行机制
  • 理解MVC路由配置
  • MVC控件解析
0 0
原创粉丝点击