欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.Net MVC的学习(一)

程序员文章站 2022-04-30 13:06:09
  套种间作,也挺有意思的——近来学习感悟。drp学习的同时,折腾了点以前不曾学习但是却很多次耳闻过的东西——asp.net中的mvc架构模式。 一、是什么?      mvc,...

  套种间作,也挺有意思的——近来学习感悟。drp学习的同时,折腾了点以前不曾学习但是却很多次耳闻过的东西——asp.net中的mvc架构模式。

一、是什么?

  

  mvc,即(model-view-controller,模型—视图—控制器模式),和三层类似,用于表示一种软件架构模式。在这种模式下,将的实现分为模型model,视图view,控制器controlller。其中model:对的操作和一般的业务逻辑。view:负责做出和用户交互的显示;controller:处理request和response请求,是view层访问model层的中介。

二、具体实现。

 

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

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


.Net MVC的学习(一)


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

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


1)model

 在model文件夹内建立一个login_bs类。因为只是简单实现,所以并没有进行对数据库进行操作,只是了解mvc实现流程和原理。喎? f/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 文件夹上右键,添加控制器

.Net MVC的学习(一)


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

  其具体代码如下:


   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);
            }
        }

    }


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


.Net MVC的学习(一)

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

具体代码如下:

  3)view


view视图代码:
@{
    layout = null;
}





    index


    

用户名:

密码:


 4、自己理解

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


.Net MVC的学习(一)



三、对比三层:

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

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

   一般aspx实现:

   .Net MVC的学习(一)



  而mvc则是:


.Net MVC的学习(一)



   保留一个问题:view是经过controller的‘同意’和model交互?还是view和controller交互,而controller和model交互?


喎?>