本节书摘来自异步社区《精通 ASP.NET MVC 5》一书中的第2章,第2.2节,作者: 【美】Adam Freeman(弗瑞曼 A.),译者: 张成彬 , 徐燕萍 , 李萍 , 林逸 责编: 张涛, 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.2 创建新的ASP.NET MVC项目
本节打算从Visual Studio中创建新的MVC框架项目开始。在“File(文件)”菜单中选择“New(新建)”→“Project(项目)”,打开“New Project
(新项目)”对话框。如果在左侧“Visual C#”目录树中选择“Web”模板,会看到“ASP.NET Web Application(ASP.NET Web应用程序)”
项目模板。选择该项目类型,如图2-1所示。
将该新项目的名称设置为PartyInvites
,单击“OK(确定)”按钮并继续,此时会看到另一个对话框,如图2-2所示。这是微软项目的初始设置部分,以便将ASP.NET
的不同部分整合成一组统一的工具和模板。
提示:
请确认在对话框(图2-1)的顶部选择的是.NET Framework 4.5.1
。这是.NET的最新版本,是本书描述的一些高级特性所必需的。
该模板创建的项目带有不同的起点和特性配置,如认证、导航以及视觉主题等。为保持事情简单,选择“Empty(空模板)”
选项,并在“Add folders and core references for
(添加文件夹和核心引用)”部分勾选“MVC”复选框,如图2-2所示。这会创建一个基本的MVC项目,它带有最少的预定义内容,这也是本书用于所有示例的起点。
注:
其他模板选项意在为ASP.NET
项目提供更为完整的起点。但笔者不喜欢这些模板,因为它们鼓励开发者将一些重要特性视为黑箱进行操作。本书的目标是为你提供知识并融合MVC应用程序的各个方面,因而本书所有示例使用的几乎是这个“Empty”模板。
一旦Visual Studio创建了项目,便会看到“Solution Explorer
(解决方案资源管理器)”窗口中显示了一些文件和文件夹,如图2-3所示。这是一个新的MVC项目默认的项目结构,稍后便会理解Visual Studio所创建的这些文件和文件夹各自的用途。
现在,通过选择“Debug(调试)”菜单中的“Start Debugging
(开始调试)”(或简单地按快捷键F5),便可以试着运行这个应用程序(如果提示“Enable Debugging
(启用调试)”,请单击“OK(确定)”按钮即可)。这时,将会看到如图2-4所示的结果。由于本例是从Empty项目模板开始的,该应用程序尚未包含任何可以运行的内容,因此服务器会产生一个“404—未找到”的错误。
做完上述操作之后,要确保停止调试,这可以关闭显示出错消息的浏览器窗口。或返回Visual Studio,在“Debug
(调试)”菜单上选择“Stop Debugging
(停止调试)”(或简单地按快捷键Shift+F5)。
正如你所看到的,Visual Studio会打开浏览器来显示该项目。当然,默认的浏览器是Internet Explorer,但通过图2-5所示的工具栏,也可以选择已安装的任何浏览器。正如该图显示的,笔者已安装了一系列浏览器,并发现它们在开发期间对测试Web应用程序是很有用的。
本书将使用Internet Explorer 11,因为笔者知道IE浏览器是被广泛安装的。Internet Explorer使用了快速而宽松的Web标准,但最近的版本已经能很好地实现HTML 5标准。Google Chrome也是很好的开发选择,而且笔者倾向于在自己的项目中使用它。
2.2.1 添加第一个控制器
在MVC体系架构中,输入请求是由控制器(Controller)来处理的。在ASP.NET MVC中,控制器只是一些C#类(通常继承于System.Web.Mvc.Controller
,这是框架内置的控制器基类)。
控制器中的每一个public
方法都称为是一个动作方法(Action Method
),意即可以用某个URL通过Web来调用它,以执行一个动作。MVC约定,将控制器放在Controllers
的文件夹中,这是Visual Studio在建立项目时创建的。
提示:
你不一定要遵循这一约定或其他大多数MVC约定,但笔者建议你还是遵循它——至少因为它有助于弄清本书示例的意思(现在的编程方式提倡“约定优于配置”,这可以省去编程过程中很多琐碎的事情,故在可能的情况下,应当优先遵循约定)。
为了对项目添加一个控制器,右击Visual Studio“Solution Explorer
(解决方案资源管理器)”窗口中的“Controllers”
文件夹,并从弹出菜单中选择“Add
(添加)”→“Controller
(控制器)”,如图2-6所示。
当“Add Scaffold
(添加支架)”对话框出现后,选择“MVC 5 Controller–Empty
(MVC 5-空控制器)”选项,如图2-7所示,然后单击“Add(添加)”按钮。
这将打开“Add Controller
(添加控制器)”对话框,将其名称设置为“HomeController”
,然后单击“Add(添加)”按钮。控制器名称有几个约定:提供的控制器名称应当指明其目的;默认的控制器名称称为“Home”;控制器名称具有“Controller”
后缀。
提示:
如果曾使用Visual Studio的早期版本创建过MVC应用程序,便会注意到上述过程稍有不同。微软公司已经改变了Visual Studio用预配置类和其他条目组装项目的方式。
Visual Studio会在Controllers
文件夹中创建一个新的C#文件,其名称为“HomeController.cs”
,并打开它,以供编辑。清单2-1列出了Visual Studio放入这个类文件的默认内容。可以看出,这个类称为“HomeController”
,它派生于Controller
类,可以在System.Web.Mvc
命名空间中找到、看到这个类。
清单2-1 HomeController
类的默认内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace PartyInvites.Controllers {
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
}
}
MVC的一个良好开端是对这个控制器类做一些简单的修改。编辑HomeController.cs
文件中的代码,使其与清单2-2吻合。笔者已用黑体显示修改的语句,以便容易看出。
清单2-2 修改HomeController文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace PartyInvites.Controllers {
public class HomeController : Controller {
public string Index() {
return "Hello World";
}
}
}
这些修改没什么戏剧性的效果,但它进行了很好的演示——已修改“Index”动作方法,以使它返回字符串“Hello world”
。选择Visual Studio“Debug
(调试)”菜单中的“Start Debugging
(开始调试)”,再次运行该项目。浏览器将显示Index
动作方法的结果,如图2-8所示。
提示:
请注意,Visual Studio已经将浏览器定向到了37782端口。你的浏览器请求这一URL时,看到的肯定是一个不同的商品号,因为Visual Studio在创建项目时会分配一个随机的端口。如果查看Windows任务栏的通知区,会发现一个IIS Express图标。这是Visual Studio附带的一个精简版的全功能IIS应用程序服务器,用于开发期间递交ASP.NET的内容和服务。第13章将展示如何将MVC项目部署到产品环境。
2.2.2 理解路由
除了模型、视图、控制器之外,MVC应用程序还使用ASP.NET的路由系统(Routing System),它决定如何将URL映射到控制器和动作上。当Visual Studio创建MVC项目时,会添加一些默认的路由,以使我们能够开始工作。你可以请求以下任何一个URL,它们都会被引向HomeController
上的Index
动作。
/
/Home
/Home/Index
因此,当浏览器请求http://< 你的网站 >/,或http://< 你的网站 >/Home时,会得到HomeController
中Index
方法的输出内容,可以在浏览器中修改URL,自己试一试。图2-8所示的URL是http://localhost:37782/ (端口部分可能不同)。 如果对此URL添加 /Home或/Home/Index ,并按Enter键,看到的将是该MVC应用程序的同样结果“Hello World”
。
这是受益于遵循MVC约定的方面之一。在这个例子中,这种约定是:这里有一个名称为“HomeController”
的控制器,并且它将是MVC应用程序的起点(渲染首页的默认控制器)。Visual Studio为新项目创建的默认路由笔者会假设遵循了这一约定。由于笔者确实遵循了这一约定(指前面的操作过程中,遵循了控制器的命名约定和Index动作方法的命名约定),所以自动获得了对前面所列出的URL的支持。
如果不遵循这种约定,则需要修改路由,以指向所创建的替代控制器。对于这个简单示例,应用默认配置就行了。
提示:
这里可以打开App_Start
文件夹中的RouteConfig.cs
文件来查看和编辑路由配置。第16章和第17章将解释这个文件中的条目。