《ASP.NET MVC 4 实战》----2.2 创建第一个MVC应用程序

2.2 创建第一个MVC应用程序

ASP.NET MVC 4 实战
现在,你的PC机上已经安装了ASP.NET MVC,可以创建第一个MVC应用程序了。我们首先使用默认模板简单地创建一个新项目,然后扩展它显示一些动态内容。在此之后,将漫游一个标准的项目布局,以使你明白构成一个MVC应用程序的各个组件。

2.2.1 创建新项目

创建新的MVC项目是一个简单的过程—在Visual Studio 2010(或Visual Web Developer Express)中点击“文件”(File)菜单并选择“新项目”(New Project),将弹出“新项目”(New Project)对话框,如图2.3所示。

我们将使用C#语言来建立这个应用程序(当然,也可以使用VB.NET等其他语言)。在左侧面板选择“Visual C#”,然后选“Web”子节点。这里有几个模板可以用来创建Web应用程序。但对于这个示例,要选择“ASP.NET MVC 4 Web Application”(ASP.NET MVC 4 Web应用程序)。如果看不到这个可选项,请确保对话框顶部的目标框架设置为“.NET Framework 4”。

将该项目命名为Guestbook,并将其保存在默认的项目位置(通常是C:\Users<你的用户名>\Documents\Visual Studio 2010\Projects文件夹)。

点击“OK”按钮之后,Visual Studio将打开另一个对话框,向你提示更多信息,如图2.4所示。

项目模板、视图引擎,以及是否使用单元测试项目

在这里,你可以选择想使用的模板。“空模板”(Empty Template)提供了一个非常简单的空项目结构。“Internet应用程序”(Internet Application)模板有一些基本的布局和认证特性。“企业内部网应用程序”(IntranetApplication)模板类似于Internet应用程序,但它使用Windows认证,而不是ASP.NET的表单认证。为简单起见,请选择“Internet应用程序”模板。

你也可以选择想使用的视图引擎(View Engine)。对于此例,使用默认选项Razor,这是MVC 3引入的新引擎。另一个选项是使用旧式的Web Form视图引擎,这是MVC 1、2的默认选项。在第3章和第17章中,我们将会更详细地考察视图引擎。

最后,你可以选择是否要创建单元测试项目。对于大多数非寻常的应用程序(不是太简单的项目—译者注),编写单元测试是一种好的思想,这可以确保软件的行为正确。选中这一复选框,以创建测试项目—尽管在第4章之前我们暂时不会详细考察它。点击“OK”按钮创建该项目。

此刻,可以启动该应用程序。通过按Ctrl +F5组合键,或者,点击Visual Studio工具栏上的“调试”(Debug)按钮,然后选“开始执行(不调试)”(Start Without Debugging)便可以运行。这会启动ASP.NET的“开发服务器”(Development Server)(这是Visual Studio内置的一个简单的Web服务器,为Web应用程序提供了开发期间的运行环境 —译者注),并会在默认的Web浏览器中打开此应用程序,如图2.5所示。

在深入考察为Guestbook增加功能之前,先简要考察一下这种默认项目模板的各个部分。

2.2.2 漫游默认项目模板(的结构)

打开这个新建的项目,会看到该默认项目模板有几个含有各种文件的子目录。在Visual Studio的“解决方案资源管理器”(Solution Explorer)中可以看到它们,如图2.6所示。

Controllers、Models、Views,以及Scripts等。

该默认项目模板中的每一个文件和目录都服务于特定的目的,逐一考察如下:

1.App_Data目录
App_Data目录可以用来存放数据库、XML文件,或应用程序所需的其他数据。ASP.NET运行时能理解这种特殊目录,并会阻止用户直接访问其中的文件。只有应用程序才可以读写该目录。

2.Conetnt目录
Content目录的目的是包含需要随应用程序一起部署的各种非编码资源。这些资源包括图像和CSS(样式表)文件等。默认情况下,Content目录含有项目所使用的默认样式表(Site.CSS),以及themes子目录,其中含有jQuery UI所使用的图像和CSS(jQuery UI是用于用户界面元素的一个客户端框架,我们将在第7章进行考察)。

3.Controllers目录
回顾第1章,你可能还记得,控制器是负责处理输入并决定应该执行哪一个动作(如渲染一个视图)的协调程序。在ASP.NET MVC中,控制器是用Controllers目录中的类来表示的。默认情况下,该目录含有两个控制器—HomeController(处理访问主页的请求)和AccountController(处理身份认证)。我们将在2.2.3小节考察控制器。

4.Models目录
Models目录典型地用于容纳表示应用程序核心概念的各种类,或者将数据约束成某种格式的类,这些类专用于特定的视图,故称为视图模型(View Model)。随着应用程序变大,你可能会决定将这些类移到一个单独的项目之中,但对于小型项目而言,把它们存放在Models目录中是一种良好的开端。默认项目在这个目录中包含了一个文件—AccountModels.cs。它包含了几个与认证有关的类,这些类是由默认项目模板来使用的。

5.Scripts目录
Scripts目录是存放由应用程序所使用的各种JavaScript文件的地方。默认项目模板在这个目录中包含了相当多的文件,包括流行的开源jQuery库(将在第7章介绍)和用于执行客户端验证的脚本。

6.Views目录
Views目录含有用于渲染用户界面的模板。其中每一个模板都被表示成一个Razor视图(.cshtml或.vbhtml文件),并被放在以负责渲染该视图的控制器为名称的子目录中。如果这听起来有点困惑,不必担心,我们将在2.2.3小节探讨控制器、动作以及视图之间的关系。

7.Global.asax
Global.asax文件位于项目结构的根目录中,并包含了应用程序第一次启动时需要运行的初始化代码,如注册路由的代码(将在下一小节做简要考察)。

8.Web.config
Web.config文件也位于项目结构的根目录中,并含有ASP.NET MVC正确运行所必须的配置细节。

现在,你已经看到了默认的项目模板中不同文件的高级概述,接下来将详细考察控制器、动作以及视图等核心概念之间的交互。我们将使用默认的HomeController来描述这种交互,到2.3.3小节时,我们将创建一些自己的控制器。

2.2.3 控制器、动作,以及显示动态内容

在第1章中曾解释过,控制器的作用相当于一个协调程序。它可以接受输入(通过各种资源,如表单数据或URL中的信息),但它将页面的渲染委托给了视图。

1.控制器类和动作方法
在ASP.NET MVC中,控制器被表示成继承于Controller基类的类,类中的个别方法(称为动作(Action))对应于某个URL(动作是用来响应并处理某个URL请求的—译者注)。为了描述这是如何工作的,我们来看看项目的HomeController,可以在Controllers目录中找到它。这个类的代码如清单2.1所示。

清单2.1 默认的HomeController

HomeController是一个十分直观的控制器类的实现。为了表明这是一个控制器,它需要继承于Controller基类,并且其名称也要有“Controller”后缀。

这个类还包含了两个动作方法。动作是控制器类上的public方法,它对特定URL的请求进行处理。在此例中,这两个动作被命名为Index和About。因为这些动作在HomeController之中,所以它们可以分别通过/Home/Index和/Home/About这样的URL进行访问。因此,如果你的应用程序托管在MySite.com域中,那么,Home动作的完整URL将是http://MySite.com/home/index 。如果用户在浏览器中输入这个URL,框架将会实例化HomeController类,并调用Index动作方法。

2.路由—将URL映射到动作
此刻你可能会问:框架是如何知道将URL映射到一个特定的控制器动作的?答案就在Global.asax文件的RegisterRoutes方法中。该方法定义了将一个URL模式映射到控制器或动作的路由,其实现如清单2.2所示。

清单2.2 注册路由

“DefaultApi”部分是用于Web API的,这将在第24章介绍(Web API是微软随ASP.NET MVC 4一起发布的一个Web服务框架—译者注)。注意,这里定义了两个条目(除“DefaultApi”以外的另外两条路由—译者注)。第一个是IgnoreRoute(忽略路由),它主要是告诉框架不用担心指定路径的任何匹配事宜。上述示例是说,不必处理含有.axd文件扩展名(如Teace.asd)的任何路径。第二个条目是MapRoute(映射路由),定义了如何处理URL。这条默认路由将能满足一段时间,但后面为了提供专用于应用程序的URL,你会希望添加更多路由。

每条路由都具有名称、URL定义,以及可选的默认值。我们的第一个请求“/”并没有任何这些URL片段,因此就指望这些默认值了:

由于这些默认值,你可以在URL中忽略一些片段而获得同样的行为。而且,如果你的域名是MySite.com,则http://MySite.com/Home/Index、 http://MySite.com/Home, 以及 http://MySite.com 最终都将调用 HomeController的Index动作。

关于路由的说明

带有{controller}/{action}/{id}模板的路由是一条通用路由,能够用它对许多不同的Web请求进行服务。通过使用花括号({})来表示一些记号,而封装在括号中的单词则对应于MVC框架能够理解的值(这里的描述不够明确。{controller}/{action}/{id}称为该路由的URL模式,在这个模式中用花括号指定了controller、action、id三个路由变量,框架将其理解为控制器、动作以及传递给动作的参数(id)。如果一个请求的URL与这个模式相匹配,则路由系统会根据URL为这三个变量提取相应的值,以确定该请求要调用的控制器和动作,以及传递给动作的参数—译者注)。

我们感兴趣的最常用的值是controller和action。controller路由值是框架要传递给控制器工厂(Controller Factory)的一个特殊的值,目的是实例化一个控制器。这也是本章其余部分将要使用的路由,因此,在接下来的小节中,我们将使用“http://mvccontrib.org/< 控制器名>/<动作名>”形式的URL(mvccontrib.org是作者所使用的域名;对读者而言,域名也要根据自己的情况而定—译者注)。

我们将在第9章更深入地探讨路由。
再回头看清单2.1中的HomeController,其Index动作含有两行代码:

ViewBag.Message = "Modifythistemplatetojump-startyourASP.NET MVCapplication.";
return View();

第一行将一些任意文本赋给了ViewBag,而第二行则是指示框架应该去渲染一个视图。

ViewBag本质上是一个字典—它提供了一种存储数据的方式,这些数据随后能够在视图中进行访问。它使用了.NET 4的动态语言特性,以便能够动态地创建属性。例如,可以用一行代码将另一个属性赋给ViewBag:

public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVCapplication.";
ViewBag.CurrentDate = DateTime.Now;
return View();
}

该语句简单地将当前日期和时间赋给了ViewBag上的一个名称为CurrentDate的属性。该属性是动态创建的,而且,为了添加这一属性,不需要修改类定义(指不需要修改ViewBag类—译者注)。现在,我们可以在视图中访问该属性,该视图是通过调用return View()来渲染的。

View方法(返回的是ViewResult实例)指示框架应该去渲染一个视图。在此例中,我们未指定视图名,因此框架会推断它应该尝试渲染一个与动作同名的视图—Index—框架将试图在项目的Views目录以及以控制器命名的子目录(此例为Home)中查找该视图。

3.视图
如果回头看图2.5中的项目结构,会发现在Views/Home子目录中,确实有一个名为Index.cshtml的文件。打开这个文件会看到Index.cshtml中的以下部分标记:

这个Index视图是C#代码和HTML标记的混合体。文件的顶部包含一个设置页面标题的代码块,然后在<h2/>元素中显示了一条消息。对@ViewBag.Message的调用写出了在控制器中对ViewBag的Message属性所设置的内容。

你可以修改此视图,让其也显示添加到ViewBag的CurrentDate属性的值。只需要对Index.cshtml文件添加以下代码:

<p>The current date is
@ViewBag.CurrentDate.ToLongDateString()</p>

注意,@前缀表示HTML与代码之间的转换。最终结果如图2.7所示。

图2.7 含有当前日期的自定义ViewBag条目的内容被显示在页面上

以上默认的HomeController描述了MVC应用程序中控制器和视图的基本使用,但在屏幕上显示一条简单的消息并无多大意义。在下一节中,我们将对应用程序添加一些交互性,让用户能够对留言簿添加条目。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2025-01-30 02:28:11

《ASP.NET MVC 4 实战》----2.2 创建第一个MVC应用程序的相关文章

创建第一个Flex应用程序

在前面的文章中,笔者已经介绍了RIA.Flex技术和Flex Builder 2集成开发环境.从本 文开始将正式开始讲解使用Flex Builder 2创建Flex应用程序的方方面面.本文内容包括典 型应用程序开发步骤和创建第一个Flex应用程序的过程. 1. 应用程序开发步骤 创 建Flex应用程序的过程并不复杂.通常而言,典型应用程序的开发步骤如下所示: (1)使用文本编辑器或者Flex Builder 2创建MXML文件,并在该文件中添加MXML根标签,代码 如下: <?xml versi

《Node.js入门经典》一1.3 安装并创建第一个Node.js程序

1.3 安装并创建第一个Node.js程序 Node.js入门经典 说得够多的了!现在来看看运行中的Node.js并编写你的第一个Node.js程序.首先得安装 Node.js.用于Windows 和 OSX 的安装程序可以在 Node.js 的主页下载:http://nodejs.org/.要想在这些平台上安装Node.js,只需下载相关文件并双击安装程序即可.如果使用Linux或者想手动编译Node.js,请在https://github.com/joyent/node/wiki/insta

ython-blinker 接收到消息开的线程执行的函数中 创建了一个定时器线程程序就异常 了

问题描述 blinker 接收到消息开的线程执行的函数中 创建了一个定时器线程程序就异常 了 有没有誰碰到过这样的问题,指点一下,急. 我要实现的是从串口上报数据中发现一些主动上报,如收到短信之类的 然后发送消息调用相应的方法去读取串口数据,读取结束靠的是在指定时间内收到特定的字符串如'OK',所以在函数中又生成一个定时器线程来处理超时的情况.可是这样子有URC上报是消息调用的方法总是不能正常执行,还影响了主线程.

《精通 ASP.NET MVC 5》----第2章 第一个MVC应用程序 2.1 准备Visual Studio

第2章 第一个MVC应用程序 精通 ASP.NET MVC 5 鉴赏一款软件开发框架最好的方式是介入其中并使用它,本章将使用ASP.NET MVC框架创建一个简单的数据录入应用程序.笔者会将过程分解成一个个的步骤,以便笔者能够看出如何构造ASP.NET MVC应用程序.为了保持过程简单,这里将跳过某些技术细节.但不必着急,如果是MVC新手,你会发现大量感兴趣的内容.对于一些未进行解释的内容,笔者提供了参考章节,在那里你会看到完整的细节. 2.1 准备Visual Studio Visual St

创建第一个Go语言程序Hello,Go!_Golang

建立一个用于编写Go程序的工作目录go-examples,其绝对路径为/home/go-examples.开始编写我们的第一个Go程序. 一.在go-examples下创建一个文件hello.go 复制代码 代码如下: //hello.go   package main import "fmt"//实现格式化的I/O    /*Printf someting*/  func main(){          fmt.Printf("Hello,GO!\n")   }

《ASP.NET MVC 4 实战》----第 2 章 第一个MVC应用程序 2.1 设置开发环境

第 2 章 第一个MVC应用程序 ASP.NET MVC 4 实战 本章内容 本章将介绍Guestbook(留言簿)应用程序,它也是本书第1部分的其余章节所使用的示例.Guestbook是一个简单的应用程序,它让用户向网站递交他们的姓名和消息,并查看其他用户递交的消息.虽然这个Guestbook的概念很简单,但是我们将用它来考察ASP.NET MVC的核心组件. 在本书的第1部分中,我们将建立这个示例.为了使用MVC应用程序,首先看看需要安装的开发工具,然后创建Guestbook应用程序的初步骨

《ASP.NET MVC 4 实战》----导读

目 录第 1 章 绪论 1.1 发展阶段1.2 ASP.NET MVC是什么1.3 ASP.NET MVC 3/4的新特性1.4 小结第 2 章 第一个MVC应用程序 2.1 设置开发环境2.2 创建第一个MVC应用程序2.3 Guestbook示例应用程序2.4 小结 第 3 章 视图基础 第 4 章 充满动作的控制器 第2部分 使用ASP.NET MVC 第 5 章 视图模型 第 6 章 验证 第 7 章 ASP.NET MVC中的Ajax 第 8 章 安全性 第 9 章 以路由控制URL

ASP.NET上的另一个MVC实现:FubuMVC

在ASP.NET MVC 正式版发布前,Jeremy D.Miller 和Chad Myers 就在ASP.NET MVC的早期 版本上进行了一些工作,并对底层实现做了一些修改.后来他们改掉了几乎所有的ASP.NET MVC实现,于是决定构造另一个MVC实现FubuMVC ,不久后Mark Nijhof 被邀请加入项目并成 为主要成员. Fubu代表"For us,by us".现在FubuMVC除了使用 ASP.NET Routing外,不使用任何ASP.NET MVC的实现代码,而

《ASP.NET MVC 4 实战》----2.3 Guestbook示例应用程序

2.3 Guestbook示例应用程序 ASP.NET MVC 4 实战 为使Guestbook应用程序有用,我们需要为用户提供一些递交条目的方式,将这些条目存储起来,以便稍后进行查看.为了达到这一目标,我们打算对应用程序添加一个数据库,将其作为该留言簿的后台存储库. 首先从创建数据库开始,然后考察如何接受用户输入并存储它,最后演示如何获取数据,以便将其显示给用户. 2.3.1 创建数据库 绝大多数Web应用程序都需要某种数据仓库的支持,这可能是一个关系型数据库(如微软的SQL Server或M