zoukankan      html  css  js  c++  java
  • .Net MVC的学习(一)

      套种间作,也挺有意思的——近来学习感悟。DRP学习的同一时候,折腾了点曾经不曾学习可是却非常多次耳闻过的东西——Asp.Net中的MVC架构模式。 

    一、是什么?

      

      MVC,即(Model-View-Controller。模型—视图—控制器模式)。和三层类似,用于表示一种软件架构模式。在这样的模式下,将系统的实现分为模型Model,视图View控制器Controlller

    当中Model:对数据库的操作和一般的业务逻辑。

    View:负责做出和用户交互的显示;Controller:处理RequestResponse请求,是View层訪问Model层的中介。

     

    二、详细实现

     

     通过一个详细的样例来看MVC的详细实现

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



     PSMVC3MVC4,我查阅了相关的资料,自己的理解是:在总体的架构和实现上没有太大的变化。变化的仅仅是当中详细的一个类或者接口等变化。

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


     1)Model

     在Model目录内建立一个Login_BS类。由于仅仅是简单实现。所以并没有进行对数据库进行操作。仅仅是了解MVC实现流程和原理。


    <span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"> </span><span style="font-size:14px;">public class Login_BS    {
            public bool Login(string username, string password)
            {
                if (username == "1" && password == "1")
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
    </span></span>


     2)Controllers 

      然后在Controllers 目录上右键,加入控制器



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

      其详细代码例如以下:


    <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


    <span style="font-family:KaiTi_GB2312;font-size:14px;">View视图代码:
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <title>Index</title>
    </head>
    <body>
        <div>
            <form action="/Login" method="post">
                <p>用户名:<input type="text" name="username" /></p>
                <p>密码:<input type="password" name="password" /></p>
                <p>
                    <input type="submit" value="登陆" /></p>
            </form>
        </div>
    </body>
    </html>
    </span>

     4、自己理解

       直接执行程序,我们会发现404页面,为什么明明有View视图却不显示?事实上,这涉及到MVC模式的详细分工问题。就像在DRP中Model2模式和同学讨论的那样:严格 model2模式(MVC)模式下JSP直接绘制好的页面是不存在的?由于每一个须要显示的页面,都必须经由一个servlet进行处理之后才由jsp进行绘制出来。也就是不訪问servlet,就不会有相应的jsp绘制好的Html页面(纯属自己的理解。如有不允许见能够交流)。回到Asp.net 中,MVC中,用户訪问的地址并不映射到server中相应的文件,而是映射到相应Control里相应的ActionMethod,由ActionMethod来决定返回用户什么样的信息。而把用户訪问的地址相应到相应的Action(当然也能够是相应的文件)的工作有路由系统完毕,这当中很多复杂的处理由.net自己主动完毕,而开发人员须要告诉.net用户的訪问地址和相应Action的详细映射关系。我们直接执行程序,并没有映射到相应的Action方法。因此显示404页面也就非常正常了。
       假设我们想要显示出详细页面。

    须要再地址栏中增加相应的请求訪问方法Action方法就能够了,也就是我们表单提交的地址/Login结果就能够出来了。





    三、对照三层:

      一个非常明显的差别:相对照与三层,MVC架构模式中,是没有aspx.cs文件的。这也是MVC模式极力避免的。由于假设页面假设有代码。就自然包括了逻辑,那么就不是MVC了。

    在MVC里面,视图(View)顾名思义,仅仅是显示内容的一个载体。它自己要不要显示,要显示什么内容,所有由控制器(Controller)决定。

    这样最明显的一个优点就是:实现View和Controllers的解耦。

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

       一般aspx实现:

       



      而MVC则是:





       保留一个问题:View是经过Controller的‘允许’和Model交互?还是View和Controller交互,而Controller和Model交互?


  • 相关阅读:
    signalfx的中间件监控指标so cool
    XE6 & IOS开发之免证书真机调试(1):颁发属于自己的App签名证书(有图有真相)
    [教学] Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试
    XE8 & IOS开发之免费证书真机调试:开发证书、AppID、开发授权profile的申请,附Debug真机调试演示(XCode7 Beta版或以上版本适用,有图有真相)
    Delphi for iOS开发指南(8):在iOS应用程序中使用Tab组件来显示分页
    Delphi for iOS开发指南(7):在iOS应用程序中使用WebBrowser组件
    Delphi for iOS开发指南(6):在iOS应用程序中使用ComboBox组件来从列表中选择某一项
    Delphi for iOS开发指南(5):在iOS应用程序中使用Calendar组件来选择日期
    Delphi for iOS开发指南(4):在iOS应用程序中使用不同风格的Button组件
    Delphi for iOS开发指南(3):创建一个FireMonkey iOS应用程序
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6915972.html
Copyright © 2011-2022 走看看