1,控制器中全部的动做方法必须声明为public,如声明为private或protected,将不被视为动做方法。html
若是将Action声明为private,或者是添加[NonAction]属性,则不对外公开,没法访问。浏览器
1 private ActionResult Index() 2 { 3 return View(db.Guestbooks.ToList()); 4 } 5 6 protected override void HandleUnknownAction(string actionName) 7 { 8 Response.Redirect("http://www.baidu.com"); 9 }
代码中Index为私有方法,没法访问,若是在浏览器中输入http://localhost:5502/guestbook/Index,那么将跳转到百度首页,由于咱们重写了HandleUnknownAction方法。session
2,能够建立两个同名的Action,取不一样的HTTP动做方法选择器,如[HttpGet]/[HttpPost],前者用于显示HTML窗体,后者用来接收窗体输出的值。ide
控制器负责处理浏览器的全部请求,并决定响应什么属性给浏览器(注意不是如何响应,是响应什么,如何响应是View的关注点),控制器还负责协调Model与View的数据传递。控制器中存在多种传递数据给视图的方式,好比ViewData["key"]=value。ViewData是一个ViewDataDictionary对象,实现了接口IDictionary<string, object>,因此在设置ViewData属性时,传入的key必须为字符串类型。post
好比说ViewData.Model,也就是以前经常使用的强类型视图。this
好比说ViewBag,ViewBag被声明为dynamic动态类型,对ViewBag的任何访问动做,最终仍是对ViewData来进行操做,两者惟一的差异是ViewBag是动态类型。spa
代码:ViewBag.key=value; 能够看出ViewBag是ViewData的语法糖。code
TempData也是字典型别,与ViewData不一样,TempData用session保存信息,TempData通常与RedirectResult配合使用,只要有取用TempData的值,值在当次网页要求就被清除。htm