原文: https://www.asp.net/mvc/overview/getting-started/introduction/adding-a-controller
MVC是 模型-视图-控制器(model-view-controller)的缩写,是一种架构良好,可测试并且维护简单的编程模式
基于MVC的程序包含:
- 模型(Models):用于的定义程序用到的数据的类,并在其中为数据添加需要的业务验证逻辑
- 视图(Views): 程序用来动态生成HTML页面的模板文件
- 控制器(Controllers): 处理浏览器请求,获取模型数据,并指定View模板来向浏览器返回响应
在 Solution Explorer 中, 右键点击 Controllers 文件夹,=>Add, => Controller.
在弹出的Add Scaffold 对话框中, 选择MVC 5 Controller - Empty,之后点击 Add.
在弹出的对话框中输入controller的name:HelloWorldController
可以看到,在项目中的Controllers文件中创建出了 HelloWorldController.cs,同时,Views文件夹中生成了HelloWorld文件夹
用以下代码替换HelloWorldController.cs的内容
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { public string Index() { return "This is my <b>default</b> action..."; } public string Welcome() { return "This is the Welcome action method..."; } } }
运行程序,看到的是项目的Home页,在地址栏中添加HelloWorld (完整是 http://localhost:12174/HelloWorld ),看到的页面如下
ASP.NET MVC 根据输入的url来调用不同的controller类,ASP.NET MVC默认的URL路由使用下面的格式:
/[Controller]/[ActionName]/[Parameters]
可以在 App_Start/RouteConfig.cs 中设置路由格式
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MvcMovie { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } }
如果不指定url,默认是Home controller的Index action
URL的第一部分决定使用哪个controller,所以 /HelloWorld 映射到HelloWorldController.cs;URL的第二部分决定执行controller中的
哪一个action方法,所以 /HelloWorld/Index 会执行HelloWorldController中的Index方法(Index是默认的action方法);
在地址栏中输入http://localhost:12174/HelloWorld/Welcome ,可以看到Welcome action 方法返回的字符串
修改Welcome方法以接受URL中的参数
public string Welcome(string name, int numTimes = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes); }
访问URL: http://localhost:12174/HelloWorld/Welcome?name=Scott&numtimes=4
修改Welcome方法:
public string Welcome(string name, int ID = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID); }
修改RouteConfig.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MvcMovie { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //routes.MapRoute( // name: "Default", // url: "{controller}/{action}/{id}", // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } //); routes.MapRoute( name: "Hello", url: "{controller}/{action}/{name}/{id}" ); } } }
访问URL:http://localhost:12174/HelloWorld/Welcome/Scott/3