一:简单理解Controller
新建controller必须以命名+controller结尾,controller的职责是负责与Model进行交换并将数据传递给view视图显示给用户
简单的控制器:
public class HomeController : Controller { // // GET: /Test/ public ActionResult Index() { return View(); } }
这里,对其进行简单的修改
public string Index() { return "Hello World"; }
浏览器能正确在页面返回”Hello World”字符串;
接下来我们来更改Controller来将其返回不同的ActionResult对象
类别 | Controller辅助方法 | 用途帮助 |
ContentResult | Content | 回传一个用户自定义的文件属性 |
EmptyResult | 不响应任何信息到客户端 | |
FileResult 1.FileContentResult 2.FilePathResult 3.FileStreamResult |
File | 以二进制串流的方式回传一个文档信息 1.直接输出byte[]属性 2.指定文档路径输出文档属性 3.指定Stream对像回传其属性 |
HttpStatusCodeResult 1.HttpNotFoundResult 2.HttpUnauthorizedResult |
HttpNotFound
| 回传自定义的HTTP状态代码与消息 1.回传HTTP404状态代码 2.回传HTTP401状态代码 |
JavaScriptResult | JavaScript | 回传的是javascript脚本 |
JsonResult | Json | 将数据串行化成JSON格式回传 |
RedirectResult | Redirect RedirectPermanent | 重新导向指定的URL |
RedirectToRouteResult | RedirectToAction RedirectToPermanent RedirectToRoute RedirectToRoutePermanent |
与RedirectResult相似,但是他是重导向到一个Action或Route |
ViewResultBase 1.ViewResult 2.PartialViewResult | view PartialView | 回传一个View页面 1.回传检视页面(View Page) 2.回传部分检视页面 |
EmptyResult
就是返回一个空的页面内容,所以也就可以不用view视图。
public ActionResult Test() { return new EmptyResult(); }
EmptyResult返回的是一个空的页面,那它究竟有什么功能和作用呢?这个EmptyResult可以说起到一个中转的作用,起到适配器的作用,如果我们有些请求只是要求统计一下数量并不需要显示页面,则这个Empty就起到了作用。
例如我们要想要在网站实现在线人数的统计功能,可以在网页中动态发出一个HTTP请求给Controller的其中一个Action,当Controller收到要求后会
public ActionResult OnlineUserHit() { //Todo Something return new EmptyResult(); } 或如下: public ActionResult OnlineUserHit() { return; }
ContentResult
暂且先理解ContetResult返回的的是纯文本的内容,不是html内容,其相当于Response.write(),但是如果输出的html标签内容也会被浏览器解析
public ActionResult Test() { return Content("<font color='red'>hello ContentResult</font>"); }
JavaScriptResult
这里JavaScriptResult是向前台输出一段javascript代码
在HomeController中定义两个Action
public ActionResult Index() { return View(); } public ActionResult Test4Js() { string js = "alert('Hello MVC')"; return JavaScript(js); }
在Index视图中
@{ ViewBag.Title = "Index"; } <script src="~/Scripts/jquery-1.7.1.min.js"></script> <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> @Ajax.ActionLink("调用JS", "Test4Js", new AjaxOptions())
注意引用了两个js文件
JsonResult
JasonResult是向前台输出一段Json数据
public ActionResult Index() { return View(); } public ActionResult Test4Json() { Models.User user = new Models.User() { Name = "test", Age = 11 }; return Json(user, JsonRequestBehavior.AllowGet); }
前台的view视图代码
@{ ViewBag.Title = "Index"; } <script src="~/Scripts/jquery-1.7.1.min.js"></script> <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> <script type="text/javascript"> $(function () { $("#check").click(function () { $.get("/Home/Test4Json", null, function (data) { var html = "姓名:" + data.Name + ",年龄:" + data.Age; $("#result").html(html + ","); }, "json"); }) }) </script> <h1>Json实例</h1> 查询:<input type="button" value="查询" id="check" /> <div id="result" style="margin: 10px"> </div>
RedirectToRouteResult
重导向到一个Action或Route
public ActionResult Index() { return RedirectToAction("test4RedirectToRouteResult"); } public ActionResult test4RedirectToRouteResult() { return View(); }
在浏览器输入http://localhost:8398/Home/Index
大概今天的controller的result就记录这些吧!