第一曲-控制器简介

控制器是维护MVC的灵魂所在,当我们创建一个MVC程序时,vs会自动创建一个Controllers的文件夹,如果你这时候右击它,并移动到Add上,便会看见Controller,点击它,并取名为HomeController,确定之后你会看见这样的页面。

public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }
    }

是的,一个继承了Controller类的对象,并且里面有一个公共方法,这个方法返回一个ActionResult类。我们选中ActionResult,点击F12,也就是查看定义。可以看到这个类的定义。

// Summary:
    //     Represents the result of an action method.
    public abstract class ActionResult {
        // Summary:
        //     Initializes a new instance of the System.Web.Mvc.ActionResult class.
        protected ActionResult();

        // Summary:
        //     Enables processing of the result of an action method by a custom type that
        //     inherits from the System.Web.Mvc.ActionResult class.
        //
        // Parameters:
        //   context:
        //     The context in which the result is executed. The context information includes
        //     the controller, HTTP content, request context, and route data.
        public abstract void ExecuteResult(ControllerContext context);
    }

这货是一个抽象方法,本身并不能被实例化。也就是说,我们必须返回继承他的子类。这时候我们可以看到自动生成的这个方法返回了一个View()。OK,我们看一下这个View()的定义

//
        // Summary:
        //     Creates a System.Web.Mvc.ViewResult object that renders a view to the response.
        //
        // Returns:
        //     The System.Web.Mvc.Controller.View() result that renders a view to the response.
        protected internal ViewResult View();

这个View方法返回一个ViewResult类,好吧,我们继续探究这个ViewResult类,我们经过两次F12后,终于看到了尽头,这个类果然是继承了ActionResult的。

// Summary:
    //     Represents a class that is used to render a view by using an System.Web.Mvc.IView
    //     instance that is returned by an System.Web.Mvc.IViewEngine object.
    public class ViewResult:ViewResultBase {
        // Summary:
        //     Initializes a new instance of the System.Web.Mvc.ViewResult class.
        public ViewResult();

        // Summary:
        //     Gets the name of the master view (such as a master page or template) to use
        //     when the view is rendered.
        //
        // Returns:
        //     The name of the master view.
        public string MasterName { get; set; }

        // Summary:
        //     Searches the registered view engines and returns the object that is used
        //     to render the view.
        //
        // Parameters:
        //   context:
        //     The controller context.
        //
        // Returns:
        //     The object that is used to render the view.
        //
        // Exceptions:
        //   System.InvalidOperationException:
        //     An error occurred while the method was searching for the view.
        protected override ViewEngineResult FindView(ControllerContext context);
    }
}
// Summary:
    //     Represents a base class that is used to provide the model to the view and
    //     then render the view to the response.
    public abstract class ViewResultBase:ActionResult {
        // Summary:
        //     Initializes a new instance of the System.Web.Mvc.ViewResultBase class.
        protected ViewResultBase();

        // Summary:
        //     Gets the view data model.
        //
        // Returns:
        //     The view data model.
        public object Model { get; }
        //
        // Summary:
        //     Gets or sets the System.Web.Mvc.TempDataDictionary object for this result.
        //
        // Returns:
        //     The temporary data.
        public TempDataDictionary TempData { get; set; }
        //
        // Summary:
        //     Gets or sets the System.Web.Mvc.IView object that is rendered to the response.
        //
        // Returns:
        //     The view.
        public IView View { get; set; }
        //
        // Summary:
        //     Gets the view bag.
        //
        // Returns:
        //     The view bag.
        [Dynamic]
        public dynamic ViewBag { get; }
        //
        // Summary:
        //     Gets or sets the view data System.Web.Mvc.ViewDataDictionary object for this
        //     result.
        //
        // Returns:
        //     The view data.
        public ViewDataDictionary ViewData { get; set; }
        //
        // Summary:
        //     Gets or sets the collection of view engines that are associated with this
        //     result.
        //
        // Returns:
        //     The collection of view engines.
        public ViewEngineCollection ViewEngineCollection { get; set; }
        //
        // Summary:
        //     Gets or sets the name of the view to render.
        //
        // Returns:
        //     The name of the view.
        public string ViewName { get; set; }

        // Summary:
        //     When called by the action invoker, renders the view to the response.
        //
        // Parameters:
        //   context:
        //     The context that the result is executed in.
        //
        // Exceptions:
        //   System.ArgumentNullException:
        //     The context parameter is null.
        public override void ExecuteResult(ControllerContext context);
        //
        // Summary:
        //     Returns the System.Web.Mvc.ViewEngineResult object that is used to render
        //     the view.
        //
        // Parameters:
        //   context:
        //     The context.
        //
        // Returns:
        //     The view engine.
        protected abstract ViewEngineResult FindView(ControllerContext context);
    }

并且在途中还看到了一些奇奇怪怪的属性和方法,欧,饶了我吧,这么多东西,怎么学啊!!!!!!!!额。。。现在我告诉你一件听了你可能会生气的事情,就是我们看了这么多东西,其实,这些东西并没有什么卵用(尼玛!!坑爹啊!(╯°口°)╯(┴—┴

好吧,是暂时没什么卵用,不代表以后没用。( ̄▽ ̄)

我们再回到HomeController类中,在Index方法下右击Add View,直接确定,什么都不用看。你会来到一个cshtml页面。这特么又是什么鬼啊??在这里,我要很高兴地告诉你,你来到了第二曲的地方-视图(就是MVC中的View啦),下一曲开始!

----来自《吹响!上低音号》

时间: 2024-10-13 22:28:55

第一曲-控制器简介的相关文章

一周学会mysql:第一章mysql简介

mysql是支持众所周知的sql(结构化查询语言)数据库语言的一个关系数据库 数据库是由持久性数据的某些集合组成的,由数据库管理系统管理 数据库专用语言把命令传递给数据库服务器,这种语言叫数据库语言 NULL值:未知的值(空值),部要和0混淆了 主键用来唯一标识表中的一列,表中不可能有2个不同行在他们的主键上具有相同的值,主键必须有个值 候选键:表中包含多个可以作为主键的列,但只有其中一个可以作为主键 替换键:不是表格主键的候选键. 外键:是表中的一列,该列是另外一个表的主键内容的一个子集 一周

用 WEKA 进行数据挖掘 ——第一章:简介

1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中在特征提取,算法选择和参数调优上.那么,一个可以方便地提供这些功能的工具,便是十分必要的了.而weka,便是数据挖掘工具中的佼佼者.Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化的,基于JAVA环境下

ThinkPHP学习(二)理清ThinkPHP的目录结构及访问规则,创建第一个控制器

ThinkPHP的目录结构 回顾上一篇的安装目录: 目录对应关系 F:\\PHP├─index.php       入口文件├─README.md       README文件├─Application     应用目录├─Public          资源文件目录└─ThinkPHP        框架目录 thinkphp 的目录结构 ThinkPHP 的目录结构非常清晰和容易部署.大致的目录结构如下,以项目为基础进行部署. ┎━ThinkPHP 框架系统目录┃ ┝ ThinkPHP.ph

第一章 C++简介

第一章  C++简介 1.1  C++特点 C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言,C++模板支持的泛型编程. 1.2  C语言及其编程原理 20世纪70年代贝尔实验室的Dennis Ritchie开发了C语言(为了开发UNIX操作系统). C语言是过程性语言,采用结构化编程方法(代码块.分支结构,如for.while等代码块). C语言流行自顶向下的程序设计. 1.3  C++语言 1.3.1  C++起源 C++也是在贝尔实验室

第一章 Mysql简介及安装和配置

第一章 Mysql简介及安装和配置 ·    第一节:Mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品. 使用 C和 C++编写的. 集群(Cluster),适合大规模应用 ·   第二节:Mysql安装及配置 MySql安装注意一次行安装成功,不然要处理注册表. 安装选择编码格式为GBK或UTF-8. 安装MySql图形界面(Navica或MySQlog). p.MsoNormal,li.MsoNormal,div.Mso

The Internet Communications Engine (Ice) 跨平台异构通讯方案 第一弹-ICE简介

.net中的通讯方案很多,从.net Remoting,MSMQ,Webservice,WSE,WCF等等,他们都有一个特点,易用,但是都不能跨语种异构,如果你服务端要用java开发,客户端用C#开发,或者其它语言譬如C++, Python,PHP, Ruby, Objective-C,等等,那么.net提供的解决方案将不再有效.现在,隆重推出跨平台异构方案ICE.ICE官网:http://www.zeroc.com/ice.html 简介:The Internet Communications

javascript高级程序设计 第一章--javascript简介

javascript高级程序设计 第一章--javascript简介Netscape开发的javascript最初的目的就是处理由服务器负责的一些输入验证操作,而在js问世之前,必须                    把表单数据发到服务器端用户才能得到反馈.如今的js不再局限于简单的数据验证,而且具备了与浏览器窗口及其内容等所有方面的交互能力,js已经发展成功能全面的面向客户端的编程语言.javascript由Netscape公司开发,原名Livescript,是为了迎合当时的java热,所

第一章 Maven简介

为什么使用Maven? IDE?Eclipse? ? 手工操作较多,编译.测试.部署等工作都是独立的,很难一步完成 ? 每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错 Ant? ?没有一个约定的目录结构 ? 必须明确让ant做什么,什么时候做,然后编译,打包 ? 没有生命周期,必须定义目标及其实现的任务序列 没有集成依赖管理 MAVEN? ? 拥有约定,知道你的代码在哪里,放到哪里去 ? 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

《深入理解LLVM》第一章 LLVM简介

第一章 LLVM简介 作者:史宁宁 1.1 LLVM是什么 LLVM是什么?这是一个虽然基础,但是也曾经让很多新入门的人迷惑的一个问题.从字面上来讲,LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助.但是现在,LLVM所代表的基本和虚拟机没有关系了,也不在作为一个缩写使用了,而是直接作为一个名字使用.那么LLVM到底是什么? LLVM可以被看作是一系列的编译器和工具链技术的集合,而且它们是模块化并且是可重用的.这是LLVM官