MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。Asp.net MVC是微软提供的MVC开发框架。web
MVC将UI层分为了三个部分: 数据库
用VS建立了一个新的ASP.NET MVC应用程序后,将自动向这个项目中添加一些文件和目录,如图所示3-1所示。跨域
图3-1 asp.net mvc 项目目录结构 浏览器
表3-1是对目录的说明 服务器
表3-1 asp.net mvc程序结构说明 架构
目录mvc |
用途框架 |
/Controllerasp.net |
用于保存那些处理URL请求的Controller的派生类工具 |
/Models |
用于保存那些表示和操纵数据以及业务对象的类 |
/Views |
存那些负责呈现输出结果(如HTML)的UI模板文件 |
/Scripts |
保存Js库文件和脚本 |
/fonts |
用于保存Bootstrap模板系统中的字体文件 |
Content |
用于保存CSS、图像和其余站点的内容,而非脚本 |
/App_Data |
保存想要读取/写入的数据文件好比.mdf的本地数据库文件 |
/App_Start |
保存一些同能的配置代码,路由等 |
MVC模式的工做过程如图3-2所示。
图3-2 MVC工做过程
客户端的所请求的URL是被映射到相应的Controller去,而后由Controller来处理业务逻辑,或许要从Model中取数据,而后再由Controller选择合适的View返回给客户端。
咱们运行的ASP.NET MVC程序访问的http://localhost:2176/Home/Index这个URL,它访问的实际上是HomeController中的Index这个Action,如图3-3所示。
图3-3 URL对应关系
其中 public ActionResult Index() 这个方法称为Controller的Action,他返回的是ActionResult的类型。一个Controller能够有不少个Action。
那么一个URL是怎样被定位到Controller中来的呢?它是经过"路由"完成的,默认代码以下:
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 = "Home", action = "Index", id = UrlParameter.Optional } ); } } |
RegisterRoutes()方法的做用就是定义路由,即定义URL访问规则。咱们能够看到这里定义了一个名为"Default"的Route,还定义了默认的参数。默认参数的意义在于,当咱们访问例如http://localhost:2176/的URL的时候,他会将不存在的参数用默认的参数补上,也就是至关于访问http://localhost:2176/Home/Index同样。
在控制器中,使用View()方法调用视图,返回和动做方法同名的视图,可是却没有显示提供视图的位置。其实这里依赖的是视图的寻址规则,即会按照规则从规定的路径去寻找这个命名的视图。在ASP.NET MVC中,有一条寻址规则,就是从Views文件夹下和控制器名同名的文件夹中寻找。
ASP.NET MVC程序对于一次请求的处理过程如图3-4所示。最开始应用程序启动,注册路由;当请求到来时,寻找路由表找到负责处理的控制器和动做方法,交给该动做方法处理;动做方法处理完毕,根据寻址规则找到视图,由视图负责页面呈现。
图3-4 ASP.NET MVC 工做过程
ASP.NET MVC框架的一大特色就是"约定胜于配置",即一些规则是约定好的,不须要经过配置文件去配置。咱们约定:
对象名称 |
说明 |
Request |
用来获取客户端在web请求期间发送的值,如URL参数、表单值等 |
Response |
用来负责返回到客户端的HTTP输出 |
Application |
做用于整个应用程序运行期间的状态对象,可用来保存整个应用程序的配置参数 |
Session |
会话状态保持对象 |
Cookie |
客户端保持会话信息的方式 |
Server |
用于进行一些服务器端处理的工具对象,如URL,编码解码 |
HttpContext |
封装有关个别HTTP请求的全部HTTP特定信息 |
Request对象的经常使用成员以下:
成员 |
说明 |
String ContextType |
获取设置传入请求的MIME内容类型 |
HttpCookieCollection Cookies |
获取客户端发送的Cookie的集合 |
HttpFileCollection Files |
获取由客户端上传的文件集合 |
NameValueCollection Form |
获取表单提交的数据 |
NameValueCollection Headers |
获取Http头信息 |
NameValueCollection QueryString |
获取Http查询字符串变量集合 |
String RawUrl |
获取当前请求的原始URL |
NameValueCollection ServerVariables |
获取web服务器变量集合 |
String UserAgent |
获取客户端浏览器的原始用户代理信息 |
String UserHostAddress |
获取远程客户端的IP地址 |
String MapPath(path) |
将指定的虚拟路径映射到物理路径 |
Save() |
将HTTP请求保存到磁盘 |
成员 |
说明 |
String ContentType |
获取或设置输出流的HTTP MIME类型 |
HttpCookieCollection Cookies |
获取相应Cookie的集合 |
NameValueCollection Headers |
获取相应标头的集合 |
Redirect(url) |
将请求重定向到新的URL |
Write(data) |
将一个字符串写入HTTP相应输出流 |
经常使用成员 |
说明 |
string MapPath(path) |
返回与Web服务器上的指定虚拟路径相对应的物理文件路径 |
Transfer |
使用指定的path路径进行转发 |
string UrlDecode |
对字符串进行URL编码 |
string UrlEncode |
对字符串进行URL解码 |
在Asp.net 中,Session以key-value的方式在服务器端保存数据,它的使用方式很是简单,以下。
Session["Session名称"] = 值; //存值
变量 = Session["Session名称"]; //取值
Session对象经常使用成员:
经常使用成员 |
说明 |
string SessionId |
包含惟一用户会话标识符,它可用与整个会话过程记录用户的信息 |
int Timeout |
用户超时的时间,单位分钟。在该段时间内,用户即便没有任何操做用户的状态也不会清除。若是一段时间内没有操做,服务器没法知道用户是否在线,因此Session中的数据生存期以超时时间为限 |
Abandon() |
结束Session,取消当前会话 |
Add(name,value) |
添加Session数据 |
Remove(name) |
删除数据 |
语法:
Response.Cookies[Cookie的名称].Value = 变量值; //写入Cookie
string 变量 = Request.Cookies[Cookie的名称].Value; //读取Cookie
经常使用成员 |
说明 |
string Name |
Cookie对象名称 |
string Value |
Cookie对象的内容 |
DataTime Expires |
Cookie对象的有效时间。若是没有设置Cookie的失效日期,它们仅保存到关闭浏览器程序为止;若是Cookie对象的Expires属性设置为DateTime.MaxValue,则表示Cookie永远不会过时 |
经常使用成员 |
说明 |
HttpApplicationState Application |
Application对象 |
HttpRequest Request |
Request对象 |
HttpResponse |
Response对象 |
HttpServerUtility Server |
Server对象 |
HttpSessionState |
Session对象 |
Iprincipal User |
User对象 |
Cache |
Cache对象 |
static HttpContext Current |
为当前Http请求获取或设置HttpContext对象 |
需求:
在登陆控制器中引用命名空间
using System.Web.SessionState;
控制器实现 IRequiresSessionState 接口
public class AccountController : Controller, IRequiresSessionState
{
public ActionResult Login(string loginName,string loginPwd)
{
if (loginName=="admin" && loginPwd=="sa")
{
Session["User"] = "admin"; //可直接使用
return RedirectToAction("index", "book");
}
}
}