zoukankan      html  css  js  c++  java
  • 创建我的第一个MVC4-基于ASPX

    1.前言

      在初学习MVC过程中,学到了不少的新东西,为了避免今后忘记,现在先记录下简单的学习笔记

    2.MVC简介

      对于大部分同行来说,对于MVC肯定不会陌生吧。笔者是一个语言上的巨人,行动上的矮子。一直以来都想学习MVC框架,不过一直停留在基础的定义上。只知道MVC的定义,即M:model(模型),V:View(视图),C:controller(控制器),然后每当别人说起MVC时,自以为已经很熟了,真正写的时候才发现完全不会。废话不多说,开始吧。

      MVC的介绍,网上有不少,我这里就不再粘贴复制介绍了,想了解的朋友可以参照https://www.cnblogs.com/netcorner/p/3757092.html

    3.测试项目结构

      项目的目录结构如下图所示

     

      目录结构主要包含(从上到下)以下几个部分

      App_Start:主要包含路由配置相关信息,主要用来导航到指定的控制器(路由是MVC中很重要的一个部分)。路由相关的知识可以参照博主https://www.cnblogs.com/landeanfen/p/5989092.html

      Controllers:就是我们熟悉的定义里的controller(控制器),主要是通过获取view层传来的数据,调用后台(model层)处理(eg:数据查询)返回数据给view层

      Models:这就是我们的model层(模型层)。主要作用是定义数据模型和一些对数据库操作的方法,用来处理数据,并返回结果给controller层

      views:就是我们用户能见到的视图部分。这里要注意VIew视图的结构。MVC规定,视图结构和名称需参照controller控制器,具体的规则下面会介绍。

      最外层的web.config文件:主要加入一些数据库连接字符串之类的静态配置。

    4.App_Start介绍

      

      App_Start部分,由FilterConfig、RouteConfig、WebApiConfig三部分组成。

      FilterConfig:主要用来为我们的程序添加过滤规则。详细介绍参照FilterConfig介绍

      RouteConfig:目前笔者只用到了RouteConfig配置,对路由配置进行一些修改

      WebApiConfig:开发WebApi用的,需要开发WebApi的可以了解下。

      下面我们着重介绍下RouteConfig,具体代码如下:

    public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "SysAdmin", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    controller = "SysAdmin",标识我们的控制器名称是SysAdminController,其中Controller后缀名是控制器特有的,相当于SysAdmin才是SysAdminController的真正名称

      action=“Index”,这个Index代表的是SysAdminController控制器里面的一个方法名称。该方法返回View对象。

      综上看来,这个路由配置就是导航到特定的控制器执行程序,相当于一个指路人作用。

    5.Controllers介绍

      控制器作为MVC重要组成部分,相当于我们现实生活中的中介一般,连接的租客和房源。
      控制器主要完成三个大的部分功能:1.通过Request.Params获取前端Form传递过来的数据,调用模型处理数据,返回结果数据到view层。主要代码结构如下所示
    public class SysAdminController : Controller
        {
            //
            // GET: /SysAdmin/
    
            public ActionResult Index()
            {
                return View("AdminLogin");
            }
            public ActionResult AdminLogin()
            {
                //1.获取数据
                SystemAdmin admin = new SystemAdmin() {
                    LoginId =Convert.ToInt32(Request.Params["loginid"]),
                    pwd=Request.Params["pwd"]
                };
                //2.处理数据
                SysAdminService service=new SysAdminService ();
                admin=service.Login(admin);
                //3.返回数据
                if (admin != null)
                {
                    ViewData["info"] = "欢迎你," + admin.Name;
                }
                else
                {
                    ViewData["info"] = "用户名或密码错误!";
                }
                return View();
            }
    
        }

      其中,调用SysAdminService处理方法时,我们传入的是一个模型对象SystemAdmin ,同时返回的数据也是一个对象,这正符合我们面向对象的思想。ViewData是控制器Controller和视图VIew的公共基类的一个属性,我们通过该属性可以完成视图获取到控制器写到ViewData的数据。

      注意:我们这个控制器里面有两个方法Index()和AdminLogin() 这两个方法对应本应该对应不同的视图,方法名称即对应的视图名称。由于Index方法里面返回视图时不时默认视图,加入了AdminLogin,所以两个方法的对应视图都是AdminLogin。

     6.Models介绍

      Models即模型部分,主要包含了数据对象模型的定义和一些数据库访问、操作方法的定义。Models结构如下图所示

      

      OracleHelper:主要是对数据库的一些底层操作方法,具体代码如下所示

    public class OracleHelper
        {
            private static string conn = ConfigurationManager.ConnectionStrings["conn"].ToString();
            public static SqlDataReader GetDataReader(string sql)
            {
                SqlConnection con = new SqlConnection(conn);
                SqlCommand cmd = new SqlCommand(sql, con);
                try
                {
    
                    con.Open();
                    return cmd.ExecuteReader(CommandBehavior.CloseConnection);//CommandBehavior.CloseConnection作用:如果关联的datareader关闭,则con连接也一起关闭
                }
                catch (Exception ex)
                {
                    //错误信息写入日志
                    throw ex;
                }
                
            }
        }

      其中需要注意的是:在执行cmd.ExecuteReader(CommandBehavior.CloseConnection);时,需要传入CommandBehavior.CloseConnection,以便关联的datareader关闭,则con连接也一起关闭

     SysAdminService:主要定义一些方法用用来访问OracleHelper,提供给controller调用来实现数据处理,主要代码如下
    public class SysAdminService
        {
            public SystemAdmin Login(SystemAdmin admin)
            {
                string sql = string.Format("select name from sysadmin where loginid={0} and pwd='{1}'",admin.LoginId,admin.pwd);
                SqlDataReader reader = OracleHelper.GetDataReader(sql);
                if (reader.Read())
                {
                    admin.Name = reader["name"].ToString();
                }
                else
                {
                    admin = null;
                }
                reader.Close();
                return admin;
            }
        }

      注意:使用完成记得关闭reader,reader.close();

      SystemAdmin:这个主要是数据库表单对应的模型类,数据对象,这个按照实际的需求定义的,主要代码如下:

    public class SystemAdmin
        {
            //登录id
            public int LoginId { get; set; }
            //登录密码
            public string pwd { get; set; }
            //登录姓名
            public string Name { get; set; }
        }

    7.Views介绍

      View层是用户经常打交道的,所以美工方面也很重要,我们平时开发时,应该多注意界面的美观性。

      在MVC中,对于视图和控制器命名规则有一种约束。控制器必须以controller结尾(如我们的SysAdminController),视图必须在Views文件夹下的子文件夹里面(如:Views/SysAdmin/AdminLogin.aspx),views下面的子文件夹必须需要和controller控制器去掉后缀名命名,视图的名称要和对应的控制器一致(因为控制器默认返回的视图和控制器方法名称一致),或者说控制器方法里面通过调用视图名称返回视图,如:

      就是在Index方法返回 Views/SysAdmin/AdminLogin.aspx视图。

      笔者的测试项目视图代码如下图所示:

    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
    
    <!DOCTYPE html>
    
    <html>
    <head runat="server">
        <meta name="viewport" content="width=device-width" />
        <title>SysAdmin</title>
    </head>
    <body>
        <div>
            <form method="post" action="/SysAdmin/AdminLogin">
                id:<input name="loginid" type="text"/>
                <br />
                密码:<input name="pwd" type="text"/>
                <br />
                <input type="submit" value="登录" />
                <%=ViewData["info"] %>
            </form>
        </div>
    </body>
    </html>

      通过Form就可以把视图上的数据提交到控制器后台。注意要加入method=“post”和指定控制器路径action="/SysAdmin/AdminLogin",才能调用指定控制器。

      通过<%=%>可以在aspx页面添加后台代码,或者获取数据。我们这里通过<%=ViewData["info"] %>就可以获取登录之后,后台返回的消息显示。ViewData我们之前已经说过,可以在视图和控制器中互相使用。

    8.结语

      以上内容仅笔者的自我总结,如有不当之处,望各位园友批评指正,谢谢~

     

      

  • 相关阅读:
    【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
    读取Webpage表中的内容
    各种排序算法的分析及java实现
    运行一个Hadoop Job所需要指定的属性
    Hbase常见异常
    Gora官方文档之二:Gora对Map-Reduce的支持
    Linux 系统挂载数据盘
    Gora快速入门
    Gora官方范例
    在Eclipse中运行Nutch2.3
  • 原文地址:https://www.cnblogs.com/zxwDont/p/11283984.html
Copyright © 2011-2022 走看看