打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
学习ASP.NET MVC的基本概念

visual studio用于创建mvc的模板默认包含了一个极其简单的mvc例子。通过这个例子你可以了解mvc应用的不同部分组成。这里我们利用这个简单的例子进行ASP.NET MVC基本概念的学习。

首先创建mvc应用。这里我们还是不选择添加测试项目。

创建成功后,可以看到一些文件夹和文件。你需要对Models,Views,Controllers这三个文件夹特别关注。顾名思义,这三个文件夹内包含了m,v,c中的文件。

展开controllers文件夹,我们可以看到一个叫做AccountController.cs的文件和一个HomeController.cs文件。Views文件夹下可以看到三个子文件夹 Account, Home and Shared。展开Home文件夹,看到两个文件About.aspx 和Index.aspx 。这些文件组成了我们这个mvc简单的实例。文件结构如下图

按F5运行这个项目,如果是第一次运行,会提示启动调试模式对话框。选择确定。

这个简单的项目只含有两个页面:Index和About,当程序第一次运行的时候,浏览器呈现的是index页面,可以通过右上部的导航定位到About页面。

注意地址栏中的地址。例如:当你点击About按钮时,地址栏中的地址变为/Home/About.

关掉浏览器回到VS,你不会在/Home/About目录中找到任何文件,这些文件是在该目录是不存在的,但是为什么会这样呢?

ASP.NET MVC基本概念:一个URL不等于一个页面

当你创建一个asp程序或asp.net web窗体程序时,一个URL和一个页面是一一对应的。如果你向服务器请求一个页面somepage.aspx,服务器磁盘上应该有一个页面叫做somepage.aspx,如果somepage.aspx不存在,你会得到一个404错误提示。

但是mvc程序相比之下,你在地址栏中写入的地址与项目中的文件并不是一一对应的。在mvc程序中,一个URL相当于一个controller action,并不是一个aspx页面。

在传统的aspx程序中,浏览器请求被映射到页面,在mvc程序中,浏览器请求被映射到controller action。web窗体应用是以内容为中心,mvc应用以程序逻辑为中心。

学习asp.net mvc 路径

浏览器请求得到一个由asp.net framework中叫做asp.net routing机制映射的controller action。asp.net routing被mvc框架用来为正在到达的请求选择一个路径指向controller action。

asp.net routing用一个路由表(route Table)来提交请求。这个路由表在程序第一次运行的时候就已经产生了。route table在global.asax文件中被定义。默认global.asax内容如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Routing;
  7. namespace MvcApplication1
  8. {
  9. // Note: For instructions on enabling IIS6 or IIS7 classic mode,
  10. // visit http://go.microsoft.com/?LinkId=9394801
  11. public class MvcApplication : System.Web.HttpApplication
  12. {
  13. public static void RegisterRoutes(RouteCollection routes)
  14. {
  15. routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  16. routes.MapRoute(
  17. "Default", // Route name
  18. "{controller}/{action}/{id}", // URL with parameters
  19. new { controller = "Home", action = "Index", id = "" } // Parameter defaults
  20. );
  21. }
  22. protected void Application_Start()
  23. {
  24. RegisterRoutes(RouteTable.Routes);
  25. }
  26. }
  27. }

当程序运行时, Application_Start()方法就被调用,在上面代码中, Application_Start()方法调用RegisterRoutes()方法,RegisterRoutes()创建默认路由表。

默认路由表由一条路由组成。这条路由把一个正在进行的请求分成三个部分。第一部分的URL被映射到controller,第二部分URL被映射到action,最后一部分用来给action传递参数id。例如

假设下面的url:/Product/Details/3

这个url被分解成三个部分:controller=product,action=details,id=3

在global.asax文件中定义的默认路由包含这三个参数的默认值。默认controller为Home,默认action为Index,默认id为空。有了上面的知识做基础,来分析下面这个url

/Employee

分解成三部分为controller=employee,action=Index,id=空。

最后,如果我们打开一个mvc应用不写任何的路径(如http://localhost),那么,这个路径被解析成下面的三部分

controller=Home,action=Index,id=。

请求被映射到Homecontroller中的Index()action。

学习ASP.NET MVC:理解controllers

一个controller对一个用户与mvc应用交互的方式负责。controller包含mvc应用的流控制逻辑。controller决定了当用户请求后返回给用户一个什么内容。

controller仅仅是一个类(C#或VB class),这个mvc简单例子包括一个位于controllers文件夹下的HomeController.cs文件。内容如下

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. namespace MvcApplication1.Controllers
  7. {
  8. [HandleError]
  9. public class HomeController : Controller
  10. {
  11. public ActionResult Index()
  12. {
  13. ViewData["Title"] = "Home Page";
  14. ViewData["Message"] = "Welcome to ASP.NET MVC!";
  15. return View();
  16. }
  17. public ActionResult About()
  18. {
  19. ViewData["Title"] = "About Page";
  20. return View();
  21. }
  22. }
  23. }

注意该controller下含有Index和About两个方法。这两个方法就是controller提供的公共的两个action。/Home/Index这个路径就会引用这个controller中的Index()方法。同理About()也是这样。

在controller中的任何公共方法都被当做一个controller action。对此要非常小心。这就意味着在controller下面的任何公共方法都可以被互联网上输入了正确URL的浏览器所访问到。

学习ASP.NET MVC:理解Views

上面两个Action同时都返回了view,view包含了html标记与被送往客户浏览器的内容。在mvc应用中,view就相当于一个页面。我们必须在合适的位置创建相应的view。HomeController.Index() 返回一个在下列目录中的view:\Views\Home\Index.aspx,The HomeController.About()则返回\Views\Home\About.aspx。

一般,如果想为一个controller返回一个view,你需要在Views目录下新建子目录,并以controller同名,在这个子目录中,必须建立一个aspx页面,并以controller action同名。

如About.aspx内容如下:

  1. < %@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
  2. < asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
  3. < h2>About< /h2>
  4. < p>
  5. Put content here.
  6. < /p>
  7. < /asp:Content>

如果我们忽略掉第一行,剩下View中的大部分都由标准HTML组成。我们可以修改这个View用我们想要的HTML代码。

View与asp和aspx web窗体十分类似。可以包括HTML和script内容。你可以根据自己的喜好的.net语言写脚本(c#或VB),通过这些脚本,我们可以呈现动态数据,如数据库数据。

学习ASP.NET MVC:理解Models

controller和Views都讨论完了,最后我们要讨论一下最后一个ASP.NET MVC基本概念:Models。mvc Models是什么呢?

Models包含了在controller和Views中没有实现的所有的应用逻辑。Models应该包含所有的应用业务逻辑,认证逻辑,数据访问逻辑。例如:如果使用了Microsoft Entity Framework 来实现数据访问,就需要在Models文件夹下建立Microsoft Entity Framework类的.edmx 文件。

View应该只包含与用户界面有关的逻辑。controller应该只包含转到正确View或转到其他action的逻辑。其他的东西都应该放在Models下面。

一般,我们需要向“胖”Models和“瘦”controllers努力。controller方法应该只含有少量的几行代码就可以。如果一个controller很“胖”,你则需要考虑将逻辑移到models文件夹下的一个新类里面。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
.net MVC通俗易懂实例
ASP.NET MVC案例教程—第三篇:ASP....
ASP.NET MVC3细嚼慢咽---(4)Controller用法
初识Asp.Net MVC2.0【续】
学习 ASP.NET MVC (第一回)理论篇
Getting Started With ASP.Net MVC
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服