一、是什么?

  MVC,即(Model-View-Controller,模型—视图—控制器模式),和三层类似,用于表示一种软件架构模式。在这种模式下,将系统的实现分为模型Model,视图View,控制器Controlller。其中Model:对数据库的操作和一般的业务逻辑。View:负责做出和用户交互的显示;Controller:处理Request和Response请求,是View层访问Model层的中介。

二、具体实现。

 通过一个具体的例子来看MVC的具体实现

 首先:新建一个MVC 3 web应用程序

 PS:MVC3和MVC4,我查阅了相关的资料,自己的理解是:在整体的架构和实现上没有太大的变化,变化的只是其中具体的一个类或者接口等变化。

 因为其大致流程是Request请求——→Controller——→Model然后返回给View进行显示,所以从最底层开始实现。

1)Model

 在Model文件夹内建立一个Login_BS类。因为只是简单实现,所以并没有进行对数据库进行操作,只是了解MVC实现流程和原理。<喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgo8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;"> public class Login_BS { public bool Login(string username, string password) { if (username == "1" && password == "1") { return true; } else { return false; } } }

2)Controllers 

然后在Controllers 文件夹上右键,添加控制器

 注意:其中Controller前面部分为改控制器被调用的名称,也就是表单提交的地方为Login

 其具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<span style="font-size:18px;">   </span><span style="font-family:KaiTi_GB2312;font-size:14px;">public class LoginController : Controller
    {
        //
        // GET: /Login/
 
        public ActionResult Index()
        {
            return View();
        }
        [AcceptVerbs(HttpVerbs.Post)]//表单提交方式
        public void index(string username, string password)
        {
            Models.Login_BS loginbs = new Models.Login_BS();
            //username = Request.QueryString["username"];这是get方式提交获取数据          
            //password = Request.QueryString["password"];
            if (loginbs.Login(username, password))
            {
                Response.Write("登陆成功" + username);
            }
            else
            {
                Response.Write("登录失败" + username);
            }
        }
 
    }</span><span style="font-size:18px;">
</span>

然后在其中的Index()方法右键添加视图

  之后,在View文件夹下面,会自动多出一个Login文件夹,在Login文件下面,会有一个名称为Index(添加视图时自己取得名字)后缀名为cshtml的文件,这就是我们添加的控制器所对应的View视图。添加具体的表单和控件:

具体代码如下:

3)View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<span style="font-family:KaiTi_GB2312;font-size:14px;">View视图代码:
@{
    Layout = null;
}
 
 
 
 
 
    <title>Index</title>
 
 
    <div>
        <form action="/Login" method="post">
            <p>用户名:<input type="text" name="username" data-form-un="1500271551930.9514"></p>
            <p>密码:<input type="password" name="password" data-form-pw="1500271551930.9514"></p>
            <p>
                <input type="submit" value="登陆" data-form-sbm="1500271551930.9514" style="pointer-events: auto;"></p>
        </form>
     
 
 
</div></span>

4、自己理解

    直接运行程序,我们会发现404页面,为什么明明有View视图却不显示?其实,这涉及到MVC模式的具体分工问题。就像在DRP中Model2模式和同学讨论的那样:严格 model2模式(MVC)模式下JSP直接绘制好的页面是不存在的?因为每个需要显示的页面,都必须经由一个servlet进行处理之后才由jsp进行绘制出来,也就是不访问servlet,就不会有对应的jsp绘制好的Html页面(纯属自己的理解,如有不同意见可以交流)。回到Asp.net 中,MVC中,用户访问的地址并不映射到服务器中对应的文件,而是映射到对应Control里对应的ActionMethod,由ActionMethod来决定返回用户什么样的信息。而把用户访问的地址对应到对应的Action(当然也可以是对应的文件)的工作有路由系统完成,这其中许多复杂的处理由.net自动完成,而开发者需要告诉.net用户的访问地址和对应Action的具体映射关系。我们直接运行程序,并没有映射到对应的Action方法,因此显示404页面也就很正常了。
如果我们想要显示出具体页面。需要再地址栏中加入对应的请求访问方法Action方法就可以了,也就是我们表单提交的地址/Login结果就可以出来了。

三、对比三层:

  一个很明显的区别:相对比与三层,MVC架构模式中,是没有aspx.cs文件的。这也是MVC模式极力避免的。因为如果页面如果有代码,就自然包含了逻辑,那么就不是MVC了。在MVC里面,视图(View)顾名思义,只是显示内容的一个载体,它自己要不要显示,要显示什么内容,全部由控制器(Controller)决定。这样最明显的一个好处就是:实现View和Controllers的解耦。

  另一个在于实现原理(流程)的不同:

  一般aspx实现:

   

  而MVC则是:

   

最新文章

  1. rhel6用centos163 yum源
  2. SVN 分支管理
  3. Eclipse+Selenium自动化测试脚本设计V1.0
  4. Android的Activity生命周期
  5. javascript中字符串格式json如何转化成json对象
  6. 重复安装Lync导致发布拓扑失败
  7. HDU 1232 畅通工程 (并查集,常规)
  8. Android 如何监听返回键,弹出一个退出对话框
  9. flex中在basewidget中不能使用图表组件问题
  10. sql使用存储过程和交易
  11. (转)Linux命令grep
  12. visual studio各种新建项目和新建项简介
  13. base64编码的作用【转】
  14. (转)开放window是服务器端口——以8080为例
  15. Sed 静默替换文件内容 以及 awk 的简单使用
  16. Luogu1445 [Violet]樱花 ---- 数论优化
  17. Delphi XE2 compiler performance
  18. css3 data-attribute属性打造漂亮的按钮
  19. Java如何取得当前程序部署的服务器的IP
  20. Python 使用ctypes调用 C 函数

热门文章

  1. 4.1 使用STM32控制MC20拨打电话
  2. rabbitmq 命令行工具 执行失败.
  3. XSS - 禁止浏览器读取Cookie - HttpOnly
  4. Linux:Ubuntu下部署Web运行环境
  5. jQuery:自学笔记(3)——操作DOM
  6. input propertychange(1)
  7. 跨平台移动开发 Android使用JPush推送消息
  8. 谷歌浏览器安装jsonview插件方法
  9. c# 类的序列化,以及嵌套问题
  10. INSPIRED启示录 读书笔记 - 第28章 创业型公司的产品管理