MVC 的理解

MVC简介

MVC 模式两种理解:

一种是表现模式,另外一种是架构模式。

它将应用程序分成三个主要组件即:视图(View)控制器(Controller)模型(Model

MModel 主要是存储或者是处理数据的组件Model其实是实现业务逻辑层对实体类相应 数据库操作,如:

CRUD(C:Create/R:Read/U:Update/D:Delete)。它包括数据、验证规则、数据访问和业务逻辑等应用程序信息。ViewModel:视图模型

VView 是用户接口层组件。主要是将Model中的数据展示给用户。ASPXASCX文件被用来处理视图的职责。

CController 处理用户交互,从model中获取数据并将数据传给指定的view

MVC架构模式

MVC架构综合模型

Asp.Net MVC请求模型

MVC的约定

控制器的约定大于配置

1Controller放到controllers文件夹中,并且命名方式以Controller结尾

2每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同Controller中的方法名都对应一个View视图(非必须,但是建议这么做)而且View的名字跟Action的名字相同

3控制器必须是非静态类,并且要实现IController接口

4Controller类型可以放到其他项目中。

视图的相关约定

1所有的视图必须放到Views目录下

2不同控制器的视图用文件夹进行分割,每个控制器都对应一个视图目录

3一般视图名字跟控制器的Action相对应(非必须)

4多个控制器公共的视图放到Shared

 

控制器

Action Results的种类

ViewResult – 表示HTML标签类型的结果.

EmptyResult – 表示没有返回结果.

RedirectResult –表示重定向到一个新的URL.

JsonResult – 表示在AJAX应用程序中的一个JavaScript对象格式(JSON)结果。

JavaScriptResult– 表示JavaScript结果.

ContentResult – 表示纯文本结果.

FileContentResult– 表示二进制,可下载的文件结果.

FilePathResult –表示一个路径,可下载的文件结果.

FileStreamResult– 表示一个流,可下载的文件结果.

 

ASP.NET MVC框架定义了一些方法辅助返回各种类型的ActionResult

View –  返回一个ViewResult实例的action result.

Redirect –返回一个RedirectResult实例的action result.

RedirectToAction––返回一个RedirectToRouteResult实例的action result.

RedirectToRoute–返回一个RedirectToRouteResult实例的action result.

Json –返回一个JsonResult实例的action result.

JavaScriptResult–返回一个JavaScriptResult实例的action result.

Content –返回一个ContentResult实例的action result.

File –返回FileContentResultFilePathResult FileStreamResult实例,这依赖于传递到方法中去的参数.

 

ASP.NET MVC 框架包含的HTML Heplers

Html.ActionLink()

Html.BeginForm()

Html.DropDownList()

Html.EendForm()

Html.Hidden()

Html.ListBox()

Html.Password()

Html.RadioButton()

Html.TextArea()

Html.TextBox()

 

ChemCloud启动项

MVC中如何设置路由指定默认页

今天一个刚学MVC的同学,问我MVC中怎么设置默认页,在webform中 只要右键设置起始页就可以,但MVC中却没有这个功能,其实MVC更简单

如下: 

Login是控制器,Index 是动作 在全局Global.asax中改动下即可

这个是针对area的默认页

1

2

3

4

5

6

routes.MapRoute(

       name: "Default",

       url: "{controller}/{action}/{id}",

       defaults: new { controller = "Index", action = "Index", id = UrlParameter.Optional },

       namespaces: new[] { "MvcWeb.Areas.Members.Controllers" }

   ).DataTokens.Add("Area", "Members");

  这个改动默认控制器

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(

            "Default",

            "{controller}/{action}/{id}",

            new {controller = "Login", action = "Index", id = UrlParameter.Optional }

            );  

 

启动页面设置

Areas 区域

 

WebAreaRegistration  文件

        public override string AreaName

        {

            get

            {

                return "Web";

            }

        }

 

     public override void RegisterAreaOrder(AreaRegistrationContext context)

        {

            context.MapRoute("Web_default", "{controller}/{action}/{id}", new { controller = "home", action = "Index", id = UrlParameter.Optional });

        }

//web//home//index

数据库的EF链接方式

文章提纲

概述 & 要点

详细步骤

总结

概述 & 要点

下面是本文要点,正文部分会有详细介绍。

·        EF架构图

·        新建基于EF的Data Model的约定

·        关于ORM的重要概念,和传统方式开发的区别

·        EF开发的整体过程

详细步骤

·        新建文件夹,规划好代码摆放位置

·        创建相关类 (Data Model)

·        创建 Database Context

·        创建Initializer, 使用EF初始化数据库,插入示例数据

·        完成数据库查询验证

新建文件夹,规划好代码摆放位置

1.   根目录下新建一个 ViewModels文件夹。

          Models文件夹里面存放对应于数据库表的实体。

          View中需要显示的数据和Models中实体模型不一定能对应上,因此需要专门给View使用的自定义数据模型,我们称之为ViewModel, 放在ViewModels文件夹里面。

1.   根目录下新建一个DAL 文件夹。

          DAL 放置数据访问相关类。

            NOTE 本文中放AccountContext.cs, AccountInitializer.cs

创建相关类(Data Model)

为了更加贴近真实情况,我们针对用户建立三个相关的类。

SysUser, SysRole,SysUserRole

这是用户权限管理RBAC (Role –Based Access Control)的一个典型模型, 更复杂的模型都可以在这个基础上进行扩展。

OK,下面我们就开始新建这个模型。

我们先去网上找个大致的关系图做参考,打开百度,输入 user role , 搜索图片。

挑一个类似的做参考。

NOTE 权限相关是系统管理范畴的,不涉及具体业务,我起名字的时候都加了Sys前缀,这样和业务区隔开来。

参考上面这个图建立 Data Model

SysUserEntity

SysRoleEntity

SysUserRoleEntity

对于上面几个类的约定和说明:

1.   EF生成数据库时,ID 属性将会成为主键。(约定:EF默认会将ID或classnameID生成主键,MSDN建议保持风格的一致性, 都用ID或classnameID, 我们这里都用ID)

2.   EF 生成数据库时 , <navigation propertyname><primary key property name>这种形式的会成为外键. ( 约定 )

例如外键 SysUserID = SysUser(navigation property)+ID(SysUser的主键)

3.   定义为virtual的几个属性是navigation 属性(virtual非必须, 只是惯例用法, 后面文章将会讲解用virtual的好处).

navigation 属性保存着其他的关联entity(entities)

示例中, SysUser和SysUserRole是一对多的关系, SysRole和SysUserRole也是一对多的关系.

如果是 "多", 属性类型就必须是list( 这里用的是Icollection )

创建 Database Context

前置条件:安装EF

打开 工具à库程序包管理器à程序包管理器控制台

输入 install-package entityframework

从上图可以看出,EF框架在底层是通过调用ADO.NET来实现数据库操作的。

多转一道弯性能和灵活性肯定会受到影响,所以本系列文章结束后同样也会给出MVC+ADO.NET的方案,大家可以根据需要选择。

NOTE

微软官方推出的ORM框架主要有Linq to SQL和Entity Framework.

EF是目前最新的,也是推荐配合MVC使用的框架。

实际操作前再补充一些重要概念:

如果不用ORM框架,我们一般这样来使用ADO.NET进行数据库开发:

1.   将ADO.NET对数据库的操作封装到一个类里SqlHelper中

2.   在DAL层调用SqlHelper

3.   其他层再调用DAL进行数据库操作

使用ORM之后,以前面的SysUser为例:

O(Object) à 程序中的类 SysUser, 就是对象

R (Relation)à 数据库中的表

M(Mapping)à O和R的映射关系

ORM对传统方式的改进:

充当桥梁,实现了关系数据和对象数据的映射,通过映射自动产生SQL语句。

对常用的操作,节省了写SQL语句的步骤。

好了,现在必要的概念应该理解了吧,下面我们就进行实际的操作了。

创建类 AccountContext.cs , 让他继承自System.Data.Entity.DbContext, 我们用这个类完成EF的功能。

主要做下面三件事:

1.   为每个entity set创建一个DbSet

在EF中,通常情况下一个entity set对应数据库中的一张表,一个entity对应表中的一行。

2.   指定一个连接字符串

构造函数中的 base("AccountContext")

默认情况下和类名一样,即AccountContext,我们显式的给他指定出来。

3.   指定单数形式的表名

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

默认情况下会生成复数形式的表,如SysUsers

NOTE 表名用单复数形式看各自的习惯,没有明确的规定。有的公司表名全用单数,有的公司根据表的意思,有单数也有复数。

配合上面第2点,先把web.config中连接字符串给指定了。

如下图,贴着appSettings配置节上面添加。

NOTE AttachDBFilename=|DataDirectory|\MVCDemo.mdf设定了数据库文件的存放位置:在项目根目录的App_Data文件夹下。

理论基础 -- EF 三种编程方式 (略)

总共有三种方式:

Database First,ModelFirst和Code First

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值