博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.Net MVC学习(一)
阅读量:4708 次
发布时间:2019-06-10

本文共 2658 字,大约阅读时间需要 8 分钟。

MVC 设计模式将应用程序分解成3个主要部分: Model, View, Controller(模型、视图、控制器)

Model - 模型代表一系列类用来描述业务逻辑,比如业务模型以及数据访问操作,再比如数据模型。同时也定义了对数据如何进行处理的业务规则。

View - 视图代表的是UI部分,像CSS、jquery、html等。它主要的职责是展现从controller接受到数据或模型。

Controller - 控制器职责在于处理传入的请求。它接受用户通过视图的输入,然后对用户输入的数据模型进行处理,最终通过视图将结果渲染给用户。

一、创建一个Asp.Net MVC项目

(1)打开Visual studio 点“文件”->新建->项目。

(2)选择Web 应用,输入项目名称,选择存放路径,点击确定。

(3)选择MVC 模板

(4) 选择Change Authentication(改变授权),弹出对话框中选择“No Authentication”,并点击确定。

(5)创建控制器,在资源管理器中,右击controller文件夹,选择添加->Controller(控制器)

 

输入控制器的名称”TestController“,点击添加。

在这一步骤中,要特别注意不能删除名称中的” Controller”关键字。

(6)创建行为方法

打开新建的TestController 类,可以发现已生成的Index 方法,改变输出:

(7)运行并测试 按 F5 键,在地址栏中以“ControllerName/ActionName”这样的形式输入,需要注意的输入控制器名称时,不能输入”Controller“只输入”Test”。

 

二、问题补充

(1)Action(行为) 方法是一个Controller内置的public类型的方法,能够接收并处理用户的请求,上例中,Index方法返回了一个字符串类型的响应。非public方法无法在Web中调用。如果我们需要其他函数来完成一些特定功能,可以用Action Method属性修饰。

(2)View是与放置在特定目录下的Controller相关。这个特定文件夹是以”ControllerName”命名的,并且放在View文件夹内,如果将View 放在Shared文件夹中,所有的Controller都可用。

 

(3)ASP.NET MVC的view和Controller不是严格的匹配的,一个Action Method可以引用多个view,而一个View也可以被一个Action方法使用。

(4)ActionResult子类之间的关系表

(5)从Controller到View的数据传递可以通过ViewData和ViewBag

ViewBag:

ViewBag是ViewData的动态封装器,相当于在ViewData的基础上进行了封装处理。

ViewBag的定义:

ViewData的定义:

两者的区别:

a.ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value,ViewData[“myName”]

b.ViewBag是动态类型,使用时直接通过属性赋值即可,ViewBag.myName

c.ViewData和ViewBag只在当前Action中有效,等同于ViewViewData和ViewBag中的值可以互相访问

d.ViewData和ViewBag中的值可以互相访问

两者的缺点:

a.性能问题;ViewData中的值都是对象类型,使用之前必须强制转换为合适的类型。会添加额外的性能负担。

b.没有类型安全就没有编译时错误,如果尝试将其转换为错误的类型,运行时会报错。良好的编程经验告诉我们,错误必须在编译时捕获。

c.数据发送和数据接收之间没有正确的连接;MVC中,Controller和View是松散的连接的。Controller是无法捕获View变化,View也无法捕获到Controller内部发生的变化。从Controller传递一个ViewData或ViewBag的值,当开发人员正在View中写入,就必须记录从Controller中即将获得什么值。如果Controller与View开发人员不是相同的开发人员,开发工作会变得非常困难。会导致许多运行时问题,降低了开发效率。

(6)View强类型

这种方式可以实现数据的传递,但是已经违反了MVC的基本准则。根据MVC,V是View纯UI,不包含任何逻辑层。

(7)ViewModel是ASP.NET MVC应用中隐式声明的层。它是用于维护Model与View之间数据传递的,是View的数据容器。

具体的工作原理

a.Controller 处理用户交互逻辑或简单的判断。处理用户需求

b.Controller 获取一个或多个Model数据

c.Controller 决策哪个View最符合用户的请求

d.Controller 将根据Model数据和View需求创建并且初始化ViewModel对象。

e.Controller 将ViewModel数据以ViewData或ViewBag或强类型View等对象传递到View中。

f.Controller 返回View。

(8)身份认证和授权

通常情况下,应用程序都是要求用户登录系统之后才能访问某些特定的部分。在ASP.NET MVC中,可以通过使用Authorize特性来实现,甚至可以对整个应用程序全局使用Authorize特性。若某个action需要登录后访问,则增加Authorize:

全局授权过滤器

对于大部分网站而言,基本上整个应用程序都需要身份验证,在每个控制器上添加Authorize特性很麻烦。此时,把AuthorizeAttribute配置为全局过滤器,并使用AllowAnonymous特性来允许匿名访问某些控制器或方法。修改App_Start/FilterConfig.cs文件中的RegisterGlobalFilters方法(Login方法,要添加AllowAnonymous特性):

使用Authorize特性限定用户或角色的访问

可以使用Authorize特性来限定特定用户或角色的访问。

[Authorize(Roles ="Admin")]

[Authorize(Users = "PM")]

转载于:https://www.cnblogs.com/qqvvn/p/9535563.html

你可能感兴趣的文章
中国城市json
查看>>
android下载手动下载Android SDK
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
leetcode133 - Clone Graph - medium
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
netty接收大文件的方法
查看>>
软件工程设计之四则运算
查看>>
SpringMVC @ResponseBody 406
查看>>
Partial Tree UVALive - 7190(完全背包)
查看>>
Ubuntu安装搜狗拼音教程
查看>>
Happy Number
查看>>
Sqlserver 系统视图简单说明
查看>>
vue中ESlint报错
查看>>
NetCore2.0 RozarPage自动生成增删改查
查看>>
0816 1459 json & pickle ,目录导入,目录规范
查看>>
Servlet 生命周期
查看>>