Controller是MVC模式中的三个核心元素之一.
MVC模式中的Controller主要负责响应用户的输入, 并在响应时修改Model.
MVC提供的是方法调用的结果, 而不是动态生成的页面.
下面新建一个项目名为 MVC Music Store , 以此为例说明一下MVC中的Controller.
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace MvcMusicStore.Controllers 8 { 9 public class HomeController : Controller 10 { 11 12 public ActionResult Index() 13 {
// 将默认内容修改为"I like cake!" 后即可直接显示在主页上. 14 ViewBag.Message = "I like cake!"; 15 return View(); 16 } 17 18 public ActionResult About() 19 { 20 ViewBag.Message = "Your app description page."; 21 22 return View(); 23 } 24 25 public ActionResult Contact() 26 { 27 ViewBag.Message = "Your contact page."; 28 29 return View(); 30 } 31 } 32 }
HomeController 类的Index方法负责决定当浏览网站首页时触发的事件.
下面创建一个新的控制器并命名为 StoreController, 作如下修改:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcMusicStore.Controllers { public class StoreController : Controller { // // GET: /Store/ public string Index() { return "Hello from Store.Index()"; } //get: /Store/Browse public string Browse(string genre) { return "Hello from Store.Browse() "; } public string Details() { return "Hello from Store.Details()"; } } }
不需要额外配置,浏览到/Store/Details就可以执行StoreController类中的Details方法,这就是操作中的路由.
判断一个类是否是Controller的唯一方式,就是看该类是否继承自System.Web.Mvc.Controller.
Controoller 才是MVC中真正的核心, 每一个请求都必须通过控制器处理. 有些请求是不需要Model和View的.
public string Browse(string genre) { string message = HttpUtility.HtmlEncode("Store.Browse, Genre= " + genre); return message; }
利用HttpUtility.HtmlEncode来预处理用户输入. 这样就能阻止用户用链接向视图中注入JavaScript代码或HTML标记.
控制器可将查询字符串作为其操作方法的参数来接受.
ASP.NET MVC 的默认路由约定,就是将操作方法名称后面URL的这个片段作为一个参数, 该参数的名称为ID. 如果操作方法中有名为ID的参数, 那么ASP.NET MVC 会自动将这个URL片段作为参数传递过来.