Intro to ASP.NET MVC 4 with Visual Studio [译三:添加一个控制器]
作者:Rick Anderson and Scott Hanselman
译者:PeterZhang
原文: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4
注: 边读编译,如有不准确之处,请予以纠正,谢谢!!!
-----------------------------------------------------------------------------------------------------------------
MVC 代表 model-view-controller (模型-视图-控制器)。MVC 是结构良好,可测试,易于维护的程序设计模式。基于MVC的应用程序包含:
- 模型:类,代表应用程序使用的数据和数据相应业务规则的验证逻辑。
- 视图:应用程序用于动态生成HTML响应的模板文件。
- 控制器:类,处理浏览器请求,取回模型数据,然后选择响应浏览器的视图模板。
在本教程中将涵盖这些概念,并演示如何使用它们创建一个应用程序。
让我们首先创建一个控制器类。在项目浏览器中,右键 Controller 文件夹, 然后选择 “添加控制器”。
命名新的控制器为“HelloWorldController”。保留默认模板Empty MVC controller,然后点击“添加”。
在项目浏览器中创建了一个名为 HelloWorldController.cs 的新文件。这个文件在IDE中打开了。
用下面的代码替换文件内容。
using System.Web; using System.Web.Mvc; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { // // GET: /HelloWorld/ public string Index() { return "This is my <b>default</b> action..."; } // // GET: /HelloWorld/Welcome/ public string Welcome() { return "This is the Welcome action method..."; } } }
该例子中控制器方法返回一个HTML字符串。控制器被命名为 HelloWorldController,上面的第一个方法是 Index。 让我们从浏览器中调用该方法。运行应用程序(按F5或Ctrl + F5)。 在浏览器中,在网址后面附加 “HelloWorld”。(例如, 在下面的插图中,网址是 http://localhost:12434/HelloWorld。)浏览器中页面显示如下图。 在上面的方法中,代码直接返回字符串。 你告诉系统返回HTML,然后它返回!
ASP.NET MVC 根据URL调用不同的控制类(和其中不同的action方法)。ASP.NET 使用如下格式的默认路由逻辑决定调用什么代码:
/[Controller]/[ActionName]/[Parameters]
URL的第一部分决定要执行的控制类。/HelloWorld 映射为 HelloWorldController 类。 URL的第二部分决定要执行的action方法。/HelloWorld/Index 将执行HellowWorldController类的Index方法。如果只是浏览/HelloWorld,默认调用Index方法。这是因为没有指明action方法时,Index为默认的调用方法。
浏览http://localhost:xxxx/HelloWorld/Welcome。Welcome方法被调用且返回字符串“This is the Welcome action method...”。 默认的MVC映射是/[Controller]/[ActionName]/[Parameters]。 对于该URL,controller是HelloWorld,Welcome是action方法。在该URL中没有使用[/Parameters]。
让我们对这个例子做些更改以便从URL传递参数到控制器(例如,/HelloWorld/Welcome?name=Scott&numtimes=4)。如下更改Welcome方法接受两个参数。注意下面的代码使用C#的可选参数特性,指明在没有为numTimes参数传递值时使用默认值1。
public string Welcome(string name, int numTimes = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes); }
运行程序,输入示例URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你可以在URL中为name和numtimes传递不同的值。ASP.NET MVC 模型绑定系统自动把地址栏查询字符串中的参数映射为控制器中方法的参数。
在这些示例中,控制器一直在做MVC的“VC”部分--即视图和控制器的工作。控制器直接返回HTML字符串。通常你不期望控制器直接返回HTML,因为代码会变得非常繁琐。相反会使用一个单独的视图模板文件来生成HTML相应。下面来看看如何做这点。