http://msdn.microsoft.com/zh-cn/library/dd410597(v=vs.100).aspx

 

在本演练中,您将创建并运行示例 MVC 应用程序。然后将通过添加控制器和视图来自定义该应用程序。

此外,本演练还演示如何使用测试驱动的开发 (TDD)。 在本演练中,您将创建一个包含 MVC 应用程序单元测试的项目。

Download(下载)主题附带含源代码的 Visual Studio 项目。

 

系统必备

  1. Microsoft Visual Studio 2008 Service Pack 1 或更高版本。
  2. ASP.NET MVC 2 框架。如果您已安装 Visual Studio 2010,则在您的计算机上已安装了 ASP.NET MVC 2。若要下载该框架的最新版本,请参见 ASP.NET MVC download(ASP.NET MVC 下载)页。

 

创建新的 MVC 项目

  1. 在“文件”菜单上,单击“新建项目”。

    将显示“新建项目”对话框。

    “新建项目”对话框

  2. 在右上角中,确保选择“.NET Framework 3.5”。

  3. 在“项目类型”下,展开“Visual Basic”或“Visual C#”,再单击“网站”。

  4. 在“Visual Studio 已安装的模板”下面,选择“ASP.NET MVC 2 Web 应用程序”。

  5. 在“名称”框中输入“MvcBasicWalkthrough”。

  6. 在“位置”框中,输入项目文件夹的名称。

  7. 如果希望解决方案的名称不同于项目名称,请在“解决方案名称”框中输入名称。

  8. 选择“创建解决方案的目录”。

  9. 单击“确定”。

    随即显示“创建单元测试项目”对话框。

    “创建单元测试”对话框

    注意注意

    如果使用的是 Visual Studio 的标准版或学习版,则不会显示“创建单元测试项目”对话框。而是会生成不含测试项目的新 MVC 应用程序项目。

  10. 选择“是,创建单元测试项目”。

    默认情况下,该测试项目的名称为添加了“Tests”的应用程序项目名称。不过,您可以更改该测试项目的名称。默认情况下,该测试项目将使用 Visual Studio 单元测试框架。有关如何使用第三方测试框架的信息,请参见如何:在 Visual Studio 中添加自定义的 ASP.NET MVC 测试框架

  11. 单击“确定”。

    此时将生成新的 MVC 应用程序项目和测试项目。

 

检查MVC项目

 

下图演示新创建的 MVC 解决方案的文件夹结构。

clip_image001

MVC 项目的文件夹结构不同于 ASP.NET 网站项目的文件夹结构。MVC 项目包含以下文件夹:

  • Content,用于存储内容支持文件。此文件夹包含应用程序的级联样式表(.css 文件)。
  • Controllers,用于存储控制器文件。此文件夹包含应用程序的名为 AccountController 和 HomeController 的示例控制器。 AccountController 类包含应用程序登录逻辑。 HomeController 类包含应用程序启动时默认情况下调用的逻辑。
  • Models,用于存储数据模型文件,如 LINQ-to-SQL .dbml 文件或数据实体文件。
  • Scripts,用于存储脚本文件,如支持 ASP.NET AJAX 和 jQuery 的脚本文件。
  • Views,用于存储视图页文件。此文件夹包含以下三个子文件夹:Account、Home 和 Shared。Account 文件夹包含用作 UI 的视图,该 UI 用于登录和更改密码。Home 文件夹包含“Index”视图(应用程序的默认起始页)和“About”页视图。Shared 文件夹包含应用程序的母版页视图。

如果使用的是 Visual Studio 标准版或学习版以外的版本,则也会生成测试项目。该测试项目具有包含 HomeControllerTest 类的 Controllers 文件夹。此类具有每个HomeController 操作方法(Index 和 About)的单元测试。

新生成的 MVC 项目是一个可以编译的完整应用程序,无需更改就可以运行。下图演示了在浏览器中运行应用程序时应用程序的外观。

clip_image002

单元测试项目也准备就绪,可以编译和运行。对于本演练,您将添加一个具有操作方法和视图的控制器,并且将为该操作方法添加单元测试。

 

 

添加控制器

您现在将添加一个控制器,该控制器包含用于从 Microsoft Virtual Earth Web 服务下载城市地图的逻辑。

向 MVC 项目添加控制器

1. 在解决方案资源管理器中,右击“Controllers”文件夹,再单击添加,然后单击控制器

随即显示添加控制器对话框。

clip_image001[4]

2. 在名称框中键入 MapsController

ASP.NET MVC 框架要求控制器名称以“Controller”结尾,如 HomeController、GameController 或 MapsController。

3. 清除创建更新详细信息方案添加操作方法复选框。

4. 单击添加

Visual Studio 会将 MapsController 类添加到项目中,并在编辑器中打开该类。

 

创建操作方法存根

若要将测试驱动的开发 (TDD) 技术应用于此项目,在编写操作方法本身之前,您应该为其编写单元测试。但是,如果希望编译单元测试,则必须具有计划的操作方法的存根,在本演练中,此存根为 ViewMaps。

创建操作方法存根

1. 打开或切换到 MapsController 类。

2. 用以下代码替换 Index 操作方法,以便创建 ViewMaps 操作方法存根。

VB

Function ViewMaps()

' Add action logic here

Throw New NotImplementedException()

End Function

C#

public ActionResult ViewMaps()

{

// Add action logic here

throw new NotImplementedException();

}

 

 

为操作方法添加单元测试

接下来,您将向测试项目添加控制器测试类。在此类中,您将为 ViewMaps 操作方法添加单元测试。单元测试将会失败,因为 ViewMaps 操作方法存根引发异常。在本演练后面部分中完成操作方法时,将会通过测试。

为操作方法添加单元测试

1. 在测试项目中,右击“Controllers”文件夹,单击添加,然后单击

2. 在名称文本框中,键入 MapsControllerTest

3. 单击添加

Visual Studio 会将 MapsControllerTest 类添加到测试项目中。

4. 打开 MapsControllerTest 类并输入以下代码:

C#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using System.Web.Mvc;

using MvcBasicWalkthrough;

using MvcBasicWalkthrough.Controllers;

namespace MvcBasicWalkthrough.Tests.Controllers

{

[TestClass]

public class MapsControllerTest

{

[TestMethod]

public void ViewMaps()

{

// Arrange

MapsController controller = new MapsController();

// Act

ViewResult result = controller.ViewMaps() as ViewResult;

// Assert

Assert.IsNotNull(result);

}

}

}

此代码为稍后将完成的操作方法定义单元测试。

5. 在解决方案资源管理器中,选择该测试项目,然后按 Ctrl+F5 运行单元测试。

测试将会失败,因为 ViewMaps 操作方法当前引发异常。

 

添加视图

接下来,您将添加 Maps 视图。为了使视图井井有条,您将首先在 Views 文件夹下面添加 Maps 文件夹。

向 MVC 项目添加页面内容视图

1. 打开 MapsController 类,在 ViewMaps 操作方法内右击,然后单击添加视图

随即显示添加视图对话框。

clip_image001[6]

2. 在视图名称框中输入 ViewMaps

3. 清除创建分部视图(.ascx)”创建强类型视图复选框。

4. 选中选择母版页复选框,并将母版页设置为 ~/Views/Shared/Site.Master

5. 将“ContentPlaceHolder ID”设置为“MainContent”。

6. 单击添加

该新视图将添加到项目内的 Maps 文件夹中。

 

向视图添加内容

接下来,您将向新视图添加内容。

向视图添加内容

1. 打开 ViewMaps.aspx 并在 Content 元素内添加以下内容:

<h2>My City Maps</h2>

Select map:

<select onclick="GetMap(value);">

<option value="Seattle">Seattle, WA</option>

<option value="LasVegas">Las Vegas, NV</option>

<option value="SaltLake">Salt Lake City, UT</option>

<option value="Dallas">Dallas, TX</option>

<option value="Chicago">Chicago, IL</option>

<option value="NewYork">New York, NY</option>

<option value="Rio">Rio de Janeiro, Brazil</option>

<option value="Paris">Paris, France</option>

<option value="Naples">Naples, Italy</option>

<option value="Keta">Keta, Ghana</option>

<option value="Beijing">Beijing, China</option>

<option value="Sydney">Sydney, Australia</option>

</select>

<br />

<br />

<div id='earthMap' style="position:relative; width:400px; height:400px;">

</div>

<script charset="UTF-8" type="text/javascript"

src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&mkt=en-us">

</script>

<script type="text/javascript">

var map = null;

var mapID = '';

function GetMap(mapID)

{

switch (mapID)

{

case 'Seattle':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(47.6, -122.33), 10 ,'i', true);

break;

case 'LasVegas':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(36.17, -115.14), 10 ,'i' ,true);

break;

case 'SaltLake':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(40.75, -111.89), 10 ,'i' ,true);

break;

case 'Dallas':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(32.78, -96.8), 10 ,'i' ,true);

break;

case 'Chicago':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(41.88, -87.62), 10 ,'i' ,true);

break;

case 'NewYork':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(40.7, -74), 10 ,'i' ,true);

break;

case 'Rio':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(-22.91, -43.18), 10 ,'i' ,true);

break;

case 'Paris':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(48.87, 2.33), 10 ,'i' ,true);

break;

case 'Naples':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(40.83, 14.25), 10 ,'i' ,true);

break;

case 'Keta':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(5.92, 0.983), 10 ,'i' ,true);

break;

case 'Beijing':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(39.91, 116.39), 10 ,'i' ,true);

break;

case 'Sydney':

map = new VEMap('earthMap');

map.LoadMap(new VELatLong(-33.86, 151.21), 10 ,'i' ,true);

}

}

</script>

此标记定义用于选择地图的下拉列表,以及用于从 Microsoft Virtual Earth Web 服务中检索选定的地图的 JavaScript 逻辑。

2. 保存并关闭文件。

 

向母版页菜单添加选项卡

您现在将向母版页菜单添加一个调用 ViewMaps 操作方法的项。

向母版页菜单添加选项卡

1. 在 Shared 文件夹中,打开 Site.master 文件,找到 ID 为“menucontainer”的 div 元素中未排序的列表(ul 元素)。

2. 向列表中“Index”“About Us”选项卡之间添加以下代码:

<li><%= Html.ActionLink("My City Maps", "ViewMaps", "Maps")%></li>

ActionLink 方法是链接到操作方法的帮助器方法。它采用以下参数:链接文本、操作方法的名称以及控制器的名称。

3. 保存并关闭文件。

 

测试 MVC 应用程序

您现在可以测试应用程序。

1. 在测试菜单上,单击运行,然后单击解决方案中的所有测试

结果将显示在测试结果窗口中。这次通过了测试。

2. 在解决方案资源管理器中,选择演练项目,然后按 Ctrl+F5 运行应用程序。

此时将显示 Index.aspx 页,它包括母版页中定义的选项卡。

3. 单击“My City Maps”选项卡。

此时将显示“My City Maps”页。选择任意地图以进行查看。

clip_image001[8]

 

 

后续步骤

通过本演练,您可以预先了解如何在 ASP.NET MVC 中创建 MVC 应用程序以及使用单元测试。您可能希望从中了解有关 ASP.NET MVC 框架的更多信息。下面列出了建议的主题,以供进一步了解。

posted on 2013-03-20 16:53  Louis.Lu.Sz  阅读(334)  评论(0编辑  收藏  举报