zoukankan      html  css  js  c++  java
  • MVC系列-1.MVC入门

    https://github.com/chenglingr/MyReUse/tree/master/MVCDemo

    本系列教程参考及借鉴了了以下博文:

    http://www.cnblogs.com/powertoolsteam/p/MVC_one.html

    http://www.cnblogs.com/liyanwei/p/43f3dc2484d4d082e89ca86710c4d1c2.html

    谢谢!

    1.什么是MVC

    Asp.Net MVC是Model – View – Controller 的简写,由Model,View,Controller三部分组成。Controller中包含后台代码逻辑,负责控制Model和View。View向用户提供交互界面,,如纯HTML代码,Model是中间层,封装业务逻辑相关的数据及对数据的处理方法。

    2.与ASP.NET Web Form的区别

    相对ASP.NET Web Form,会发现MVC的改变有两点,View变成简单的HTML,后台代码移到简单的.NET类中,称为控制器。

    wpsE80F.tmp

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

    Step 1:首先获取控制器。

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

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

    wpsE81F.tmp

    4. 新建项目

    wpsE830.tmp

    wpsE831.tmp

    NOTE:模板要选Empty,如果直接选MVC会产生多余代码。

    wpsE841.tmp

    NOTE:上图方框处正好对应于M, V, C

    到此为止,就建立了一个最基本的MVC解决方案,基本是空的。

    5.RouteConfig.cs文件启动项

    打开Global.asax, 注意到在程序启动的时候注册了路由规则,如下方框处。

    wpsE842.tmp

    下面我们就看下具体的路由规则。打开RouteConfig.cs文件

    注意到里面有个静态方法,这就是映射路由的控制,这个方法定义了路由规则。

    wpsE843.tmp

    其中:url: "{controller}/{action}/{id}"定义了URL的格式。

    6.创建Controller和View

    (1)添加Controller

    右键Controllers文件夹,按图示添加。

    wpsE854.tmp

    wpsE855.tmp

    控制器必须以Controller结尾(这是ASP.NET MVC的一个约定)。

    后续文章会讲用户登录的例子,所以这里先建一个AccountController.

    在这一步骤中,要特别注意千万不能删除名称中的” Controller”关键字。名称中必须包含Controller关键字。
    wpsE866.tmp

    添加后会发现多了下图方框处的类和文件夹。

    wpsE867.tmp

    我们打开新建的AccountController.cs看下,自动生成了一个方法

    public ActionResult Index()

    {

    return View();

    }

    我们称这个Index为一个Action,返回类型为ActionResult.

    可以看到,这个Action返回了一个View, 我们现在来建立这个View

    (2)添加View

    Controller是处理用户请求,并做出响应,通常情况下响应都是以显示在浏览器中,使用HTML代码,浏览器才可识别。HTML有图像,文本,输入控件等。通常称为用户界面的设计即UI层,在ASP.net MVC称为View。

    添加View有两种方法,一种是直接在Views文件夹下添加(右键ViewsàAccount文件夹)

    wpsE868.tmp

    另外一种是通过Controller中的Action来添加。这次我们采用后一种方法。

    打开AccountController, 右键Index方法,按图示添加。

    wpsE878.tmp

    wpsE879.tmp

    这样就添加了一个和特定的Controller和Action(这里指AccountController和Index)相对应的View(ViewsàAccountàIndex.cshtml)

    wpsE88A.tmp

    这个View就是最终显示的前端页面,我们在Body里面添加一行字。

    右键Index.cshtml,在浏览器中查看可以看到熟悉的HTML界面了。

    wpsE88B.tmp

    注意浏览器中的地址 xx/Account/Index

    这个地址与开头的路由规则(url: "{controller}/{action}/{id}")就对应了起来,应该很容易理解吧。

    这是典型的一个执行过程。网址路由比对如果成功,执行相应的Controller与Action,然后执行相应的View并返回结果..记住这个过程。后面的过程都会在这个简单的过程中进行扩展。

    (3)AccountController.cs里添加新方法命名为GetString

    public string GetString()

    {   return "Hello World !"; }

    在浏览器中运行 xx/Account/GetString   。。Xx为本地服务器名及端口

    7.相关说明

    1)控制器问题

    1). AccountController 和Account之间的关系是什么?

    AccountController是类名称,而Account是Controller的名称,请注意,当你在URL中输入controller的名称,不需要输入Controller这个单词。

    2). Action(行为) 方法是什么?

    Action 方法 简单的来说就是一个Controller内置的public类型的方法,能够接收并处理用户的请求,上例中,GetString 方法返回了一个字符串类型的响应。

    注意:在Asp.Net Web Forms中默认的返回请求是HTML的,如果需要返回其他类型的请求,就必须创建HTTP 处理器,重写内容类型。这些操作在Asp.net中是很困难的。在Asp.net MVC中是非常简单的。如果返回类型是”String“直接返回,不需要发送完整的HTML。

    3). Action 方法是否只能用Public修饰符来修饰?

    答案是肯定的,每个公有方法都会自动称为Action 方法。

    4). 非public方法是什么?

    类的方法都比较简单,并且并不是公共可用的。无法在Web中调用。

    5). 如果我们需要其他函数来完成一些特定功能,但不是Action Method要如何实现?

    可使用NonAction属性修饰,如下:

    [NonAction]

    public string SimpleMethod()

    {

    return "Hi, I am not action method";

    }

    当尝试给以上Action 方法发送请求时,会获得以下结果:

    wpsE88C.tmp

    (2)视图问题

    1). 为什么View会放在Account的文件夹中?

    View是与放置在特定目录下的Controller相关。这个特定文件夹是以”ControllerName”命名的,并且放在View文件夹内

    2). 在多个控制器中无法重用View吗?

    当然可以,我们需要在将这些文件放在特定的Shared文件夹中。将View 放在Shared文件夹中所有的Controller都可用

    3). 单个Action 方法中可引用多个View吗?

    可以,ASP.NET MVC的view和Controller不是严格的匹配的,一个Action Method可以引用多个view,而一个View也可以被一个Action方法使用如下代码所示:

    public ActionResult GetView()

    {

    if(Some_Condition_Is_Matching)

        {

    return View("MyView");

        }

    else

        {

    return View("YourView");

        }

    }

    4). View函数的功能是什么?

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

    · ViewResult 创建了ViewPageActivator 对象

    · ViewResult 选择了正确的ViewEngine,并且会给ViewEngine的构造函数传ViewPageActivator对象的参数

    · ViewEngine 创建View类的对象

    · ViewEngine 调用View的RenderView 方法。

    5). ActionResult和 ViewResult的关系是什么?

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

    6). 什么是ContentResult?

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

  • 相关阅读:
    MyISAM、InnoDB在频繁插入删除情况下的不同
    Solarized ----vim配色方案
    SVN命令使用详解
    好的网页
    snort在WinXP下的集成式安装
    matlab连接数据库
    KDD数据导入sqlserver2005数据库
    snort在使用过程中遇到的问题:抓不到包
    snort在使用过程中遇到的问题:ERROR: OpenAlertFile() => fopen() alert file log/alert.ids:No such file or directory
    将iso文件刻录为CD或DVD【转】
  • 原文地址:https://www.cnblogs.com/lingr/p/5562774.html
Copyright © 2011-2022 走看看