MVC全称是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑和数据显示分离的方法组织代码,将业务逻辑被聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。MVC是一种具有可测试性和易于维护的应用程序开发模式。

基于MVC的应用程序应该包含以下内容:
•模型:表示应用程序核心,是该应用程序中用来进行校验、执行业务逻辑的数据类,业务实体对象。
•视图:表示显示数据,是应用程序中处理数据显示的部分,是该应用程序动态生成HTML响应的模板文件。
•控制器:表示处理输入,是应用程序中处理用户交互的部分,是该应用程序处理浏览器传入的请求,从数据库中读取数据,然后指定视图模板返回给浏览器的响应。

创建我的第一个控制器类

首先,在Visual stdio中的“解决方案资源管理器”中,选中Controllers”文件夹,单击右键,在弹出菜单中选择“添加-->控制器”。如下图。

其次,Visual Studio会弹出的“添加控制器”对话框,在对话框的“控制器名称”文本框中输入“HelloWorldController”,在“模板”下拉框中选择默认模板“空MVC控制器”,然后单击“添加”。如下图。

第三,当鼠标点击“添加”之后,Visual Studio会创建一个.cs文件
,文件名为HelloWorldController.cs。如下图。

第四,用下面的代码替换文件中的默认代码。

public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index() { return "这是我的一个欢迎您来到ASP.NET MVC世界的 <b>控制器</b>的默认方法 !!!"; } //
// GET: /HelloWorld/Welcome/
public string Welcome() { return "这是一个欢迎您来到ASP.NET MVC世界的控制器中的指定方法..."; }
}

我的这个控制器中的Index与Welcom方法都只是返回一个字符串。

第五,在填写完代码之后,运行应用程序(按F5或Ctrl+ F5)。如下图。

Visual Studio会启动IIS Express,同时运行Visual Studio中Web应用程序,然后Visual Studio会启动默认浏览器并打开应用程序的首页。在已启动的浏览器的地址栏中的地址后面加上“HelloWorld” (例如,如下图中,它的http://localhost:36878/HelloWorld)。浏览器就会去调用新的页面,页面中显示的内容如下图。由于我在Index方法中,直接返回的是字符串,所以浏览器中显示的就是我在代码中所写的一串中文。

ASP.NET MVC根据传入的不同的URL去调用不同的控制器类以及控制器类中的不同的方法。ASP.NET MVC默认的URL路由格式如下:

/[Controller]/[ActionName]/[Parameters]

以上格式的URL,其中第一部分决定了由什么控制器类来执行,就本例来说HelloWorld映射到HelloWorldController类。 URL的第二部分决定了要执行的控制器类中的哪个方法,就本例来说HelloWorld/Index会让HelloWorldController类的Index方法执行。请注意,Index是ASP.NET MVC控制器类的默认方法,如果在没有指定具体方法的情况下使用,将调用控制器上的默认方法(Index)。
在浏览器地址栏中输入http://localhost:36878/HelloWorld/Welcome,浏览器会返回以下字符串“这是一个欢迎你来到ASP.NET MVC世界的控制器的指定方法......”。如下图。

第六,我要通过URL传递一些参数给控制器,来看我是如何修改的(例如,/HelloWorld/Welcome?name=dotnet菜园&numtimes=9)。下面的方法是用参数来改变应用程序的输出内容。代码如下所示。请注意,该代码使用C#可选参数的功能,当numTimes没有参数传递过来时,numTimes参数默认为1。

        public string Welcome(string name, int numTimes = )

        {

            return HttpUtility.HtmlEncode("欢迎 " + name + string.Format(",第{0}次来到ASP.NET MVC的世界! " , numTimes));

        }
 

直接运行程序,会报一个以下错误信息。如下图。原来在ASP.NET MVC的控制器类中默认是不支持方法重载的。如果希望方法重载要使用httpverbs或是重写actionexcuting方法

我们把Welcome方法注释掉,然后按F5来运行应用程序并在浏览器中输入http://localhost:36878//HelloWorld/Welcome?name=dotnet菜园&numtimes=9。您可以输入不同的name和numtimes值。ASP.NET MVC会自动从URL请求中获取相应的参数值。

在这个例子中,控制器一直在做MVC中的“VC”部分 - 也就是,视图和控制器的工作。本示例中的控制器直接返回一个HTML字符串。按照MVC的理论来说,控制器不应该直接返回HTML字符串,因为这样做会让代码变得非常繁琐,具体的呈现方式应该由视图去做,而不应该由控制器去做,在下一次的文章中再来介绍视图。

学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器的更多相关文章

  1. 学习ASP.NET MVC(七)——我的第一个ASP.NET MVC 查询页面

    在本篇文章中,我将添加一个新的查询页面(SearchIndex),可以按书籍的种类或名称来进行查询.这个新页面的网址是http://localhost:36878/Book/ SearchIndex. ...

  2. 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序

    学习ASP.NET MVC系列: 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器 学习ASP ...

  3. 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图

    今天我将对前一篇文章中的示例进行修改,前一篇文章中并没有用到视图,这次将用到视图.对于前一个示例中的HelloWorldController类进行修改,使用视图模板文件生成HTML响应给浏览器. 一. ...

  4. 学习ASP.NET MVC(五)——我的第一个ASP.NET MVC CURD页面

    在上一篇文章中我们已经创建了实体类,在这一篇文章中,我将创建一个新的控制器类——BookController,使用BookController对Books表中的数据进行CURD操作的方法,并使用视图模 ...

  5. 初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序

    初入码田--ASP.NET MVC4 Web应用开发之一  实现简单的登录 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查 2016-07-29 在此之前,需要一台电脑( ...

  6. 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...

  7. ASP.NET MVC入门到精通——第一个ASP.NET MVC程序

    开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递给View. View是显示数据的模板 Url请求→Cont ...

  8. ASP.NET没有魔法——开篇-用VS创建一个ASP.NET Web程序

    为什么写这一系列文章? 本系列文章基于ASP.NET MVC,在ASP.NET Core已经发布2.0版本,微服务漫天的今天为什么还写ASP.NET?. 答:虽然现在已经有ASP.NET Core并且 ...

  9. 学习ASP.NET MVC(四)——我的第一个ASP.NET MVC 实体对象

    今天我将根据数据库中的表结构添加一些类.这些类将成为这个ASP.NET MVC应用程序中“模型”的一部分.       我们使用Entity Framework(实体框架)来定义和使用这些模型类,并且 ...

随机推荐

  1. ArcGIS Js/Flex等前端API(Query(StatisticDefinition)时)针对SDE的SHAPE.AREA/SHAPE.LEN知道查询无效,而对GDB的SHAPE_Area/SHAPE_Length有效探索。

    FIeld 'SHAPE.AREA' and 'SHAPE.LEN' of SDE For Oracle,Field 'SHAPE_Area' and 'SHAPE_Length' of gdb(ge ...

  2. PERL/LEX/YACC技术实现文本解析--XML解析

    继周六的p_enum.pl后,再来一篇说说我用perl做的lex,yacc工具.之前说了,我学习lex和yacc的最初动机是为了做个C语言解释器的SHELL:但后来工作中的实际需要也是制作perl版l ...

  3. BZOJ2888 资源运输(LCT启发式合并)

    这道题目太神啦! 我们考虑他的每一次合并操作,为了维护两棵树合并后树的重心,我们只好一个一个的把节点加进去.那么这样一来看上去似乎就是一次操作O(nlogn),但是我们拥有数据结构的合并利器--启发式 ...

  4. java基础(环境设置,基础语法,函数数组)

    框架图 环境搭建 课程中常见dos命令: dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录 cd : 进入指定目录 cd.. : 退回到上一级目录 cd/ : 退回到 ...

  5. 关于gridview里加按钮事件的总结

    1. onrowcommand="GridView1_RowCommand1" 在gridview申明时的属性里要有,然后找到闪电,双击 还有要把那个按钮行模板化,就是箭头里面的t ...

  6. 使用css3制作蚂蚁线

    涉及知识点:background-clip.animation; 代码请查看codepen:https://codepen.io/guoxianqiang/pen/jVXPbm

  7. python学习八皇后问题

    0 # -*- coding: utf-8 -*- 1 import random #冲突检查,在定义state时,采用state来标志每个皇后的位置,其中索引用来表示横坐标,基对应的值表示纵坐标,例 ...

  8. [.NET领域驱动设计实战系列]专题六:DDD实践案例:网上书店订单功能的实现

    一.引言 上一专题已经为网上书店实现了购物车的功能了,在这一专题中,将继续对网上书店案例进行完善,本专题将对网上书店订单功能的实现进行介绍,现在废话不多说了,让我们来一起看看订单功能是如何实现的吧. ...

  9. 扒皮下GitHub 404的图片层次轴动特效

    今天要克隆的前端特效非常有意思,可以参见GitHub404页面 https://github.com/vajoy/master/index.html 记得之前华为在站酷发布EMUI设计大赛的主页也用了 ...

  10. ENode 1.0 - 框架的物理部署思路

    开源地址:https://github.com/tangxuehua/enode 上一篇文章,介绍了enode框架的总体目标,以及如何实现高吞吐.低延迟.高可用.无单点问题的实现思路.本篇文章,我们再 ...