Adding a Controller
MVC代表 模型-视图-控制器 。MVC是一个良好的模式及易于测试和容易维护的架构基于MVC模式的应用程序包含有:
- · Models: 应用程序代表数据和使用验证的逻辑强制执行业务规则类
- · Views: 应用程序根据模板动态生成 HTML所使用的模板文件。
- · Controllers: 处理浏览器的请求,获取数据模型,最后指定要响应浏览器请求的视图模板。
本文章中,我们将覆盖所有的这些概念,并告诉您如何使用它们来创建一个应用程序。
让我们先创建一个控制器类。在解决方案资源浏览器中,右键单击控制器文件夹,然后选择添加控制器选项。
我们我把心的控制器命名为”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:1234/HelloWorld)页面在浏览器中的效果如下图所示。在上面的方法中,代码直接返回了一个字符串。你告诉程序只返回一些HTML,然而结果确实也这样做了!
ASP.NET MVC调用不同的控制器类(和它们之间不同的操作方法)依赖于根据传入的URL。ASP.NET MVC默认的URL路由格式以确定哪部分代码会被调用:
/[Controller]/[ActionName]/[Parameters]
第一部分的URL确定那个控制器类会被执行。因此 /HelloWorld映射到HelloWorldController控制器类。第二部分的URL确定要执行控制器类中的那个操作方法。因此 /HelloWorld/Index,会使得HelloWorldController控制器类的Index 方法被执行。请注意,我们只需要浏览 /HelloWorld路径,默认情况下会调用Index方法。如果没有明确的指定,Index方法会默认的被控制器类调用。
浏览http://localhost:xxxx/HelloWorld/Welcome。 Welcome方法会被运行并返回字符串:"This is the Welcome action method...”。 默认的MVC映射为/[Controller]/[ActionName]/[Parameters] 对于这个URL,控制器是HelloWorld,操作方法是Welcome,您还没有使用过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)。你可以对参数name 和numtimes 尝试不同的值。 ASP.NET MVC model binding system 会自动根据地址栏中URL里的 querystring参数来映射到适合方法中去。
在这两个例子中,控制器一直在做着MVC中“VC”部分的功能。 也就是视图和控制器的工作。该控制器直接返回HTML内容。一般情况下,您不会让控制器直接返回HTML,因为这样代码会变得非常的繁琐。相反,我们通常会使用单一的视图模板文件来帮助生成返回的HTML。下面让我们继续了解这是能做到的吧。