MVC是Model-View-Controller的简写。MVC是一种开发良好架构,可测试,易维护应用程序的设计模式。据于MVC的应用程序应该包含:

Models: 是呈现应用程序数据和使用验证逻辑给指定的数据强制执行业务规则的Class类。

Views: 是你的应用程序用来动态产生HTML响应的模板文件。

Controllers: 是用来处理传入浏览器的请求,从Model里面取数据,然后指定返回浏览器响应的视图模板的Class类。

在本教程中我们将覆盖这些所有的概念,并且向你显示如何使用他们。

1. 创建Controller

让我们开始创建一个Controller类。在Solution Explorer下,右击Controllers文件夹然后点击Add,最后选择Controller

在弹出的Add Scaffold对话框中,点击MVC 5 Controller - Empty, 然后点击Add

给你的新的Controller命名为“HelloWorldController”,然后点击Add

注意:

Solution Explorer下一个叫HelloWorldController.cs和一个新的文件夹Views/HelloWorld被创建了。在IDE中这个controller默认被打开。

用下面的代码替换这个文件中内容:

 using System.Web;
using System.Web.Mvc; namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/Index
public string Index()
{
return "This is my <b>Default</b> action method...";
} //
// GET: /HelloWorld/Welcome
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}

这个controller方法将返回一个HTML字符串作为一个例子。这个controller被命名为HelloWorldController和这第一个方法命名为Index. 接下来让我们从浏览器调用这个方法。运行这个应用程序,在这个浏览器上的地址栏中添加“HelloWorld”路径(例如:http://localhost:5000/HelloWorld). 在浏览器中的页面将显示如下。在上面的方法中,代码直接返回了一个字符串。你告诉系统仅仅返回一些HTML,而且这个系统也如我们所愿!

2. 路由配置

ASP.NET MVC根据传入的URL调用不同的controller类(其中包含不同的action方法)。ASP.NET MVC通过使用默认的URL路由规则来决定什么代码将被调用,让我们来看一下这个默认的下路由配置:

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

你可以在App_Start/RouteConfig.cs文件中设置这个路由规则。

         public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}

当你没有提供任何URL段来运行应用程序时,这个应用程序默认使用“Home” controller及其中的“Index” action方法作为默认的URL(如上代码所示) 。

这个URL的第一部分决定了controller类的执行,因此/HelloWorld与HelloWorldController类匹配。URL第二部分决定了这个controller类中action方法的执行,因此/HelloWorld/Index将导致HelloWorldController中的Index方法执行。注意:我们仅在浏览器地址栏中给出了/HelloWorld,而Index方法是默认使用的。这是因为如果一个controller没有指定其所调用的action方法,那么其会默认调用命名为Index的action方法。URL的第三部分是给路由数据用的。在这个教程中我们将看到这些路由数据。

浏览http://localhost:xxxx/HelloWorld/Welcome。这个Welcome方法将返回字符串“This is the Welcome action method...”。这个默认的MVC匹配的路由是/[Controller]/[ActionName]/[Parameters]。对于这个URL,它的controller是HelloWorld,action方法是Welcome,并且你还没有使用[Parameters]部分。

为了我们能够传递参数信息给这个URL,让我们轻微的修改这个例子(例如:/HelloWorld/Welcome?name=zhonghua&numtimes=5).修改你的Welcome方法以便能包含上面的2个参数。注意:这个代码用了C#的可选功能来定义numTimes参数,如果没有值传入,其默认的值为1。

         public string Welcome(string name, int numTimes = )
{
return HttpUtility.HtmlEncode("Hello " + name + ", NumTiems is " + numTimes);
}

安全提示:上面的代码用了HttpServerUtility.HtmlEncode来保护这个应用程序,避免用户的非法输入。想了解更多信息,请查看How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings

运行你的应用程序,浏览到这个示例的URL地址(http://loaclhost:xxxx/HelloWorld/Welocme?name=zhonghua&numtimes=5).你也可以在URL的name和numTimes尝试不同的值。这个ASP.NET MVC模型绑定系统将会从地址栏中的query String到你方法中的参数自动的匹配命名的参数。

在上面的例子中,URL参数部分还是没有被使用到,这个name和numTimes参数是作为query strings被传入的。URL中的“?”相当于一个分割线,后面跟着的是查询字符串,不同的参数之间用“&”字串连接。

用下面的代码替换Welcome中的方法:

         public string Welcome(string name, int ID = )
{
return HttpUtility.HtmlEncode("Hello " + name + ", ID is " + ID);
}

运行这个应用程序,然后键入URL地址:http://localhost:xxxx/HelloWorld/Welcome/3?name=zhonghua

这次URL匹配了路由参数ID.这个Welcome方法包含了一个与登记路由方法中定义的URL相匹配的ID。

         public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}

在ASP.NET MVC应用程序中,通过路由数据传入参数比通过查询字符串(query strings)来传入参数是更加普遍的。你也可以在URL的路由数据中添加name和numtimes参数。如在App_Start\RouteConfig.cs文件中,添加“Hello”路由:

             routes.MapRoute(
name:"Hello",
url:"{controller}/{action}/{name}/{id}"
);

运行这个应用程序,并键入地址: /localhost:xxxx/HelloWorld/Welcome/zhonghua/3

对于大多数MVC应用程序而言,默认的路由使用起来也比较方便。在稍后的章节了我们将学习通过模型绑定来传染数据,到时候你将不得不修改默认的路由配置。

在这些例子中这个controller已经作了MVC中的“VC”部分 -- 也就是View和Controller可以起作用了。这个controller直接返回HTML。通常情况下,你并不想controller直接返回HTML,因为这将使得代码和粗糙。取而代之的是我们用视图文件来产生HTML响应。接下来让我们看看如何使用这个视图文件吧。

三、 添加视图View(ASP.NET MVC5 系列)

二、 添加控制器Controller(ASP.NET MVC5 系列)的更多相关文章

  1. [Asp.net MVC]Asp.net MVC5系列——添加视图

    目录 系列文章 概述 添加视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 概述 在这一部分我们添加一个新的控制器HelloWorldController类, ...

  2. [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据

    目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net M ...

  3. [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  4. [Asp.net MVC]Asp.net MVC5系列——添加数据

    目录 概述 显示添加数据时所用表单 处理HTTP-POST 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列 ...

  5. 三、 添加视图View(ASP.NET MVC5 系列)

    在这一章节我们可以修改HelloWorldController类,通过使用视图模板来封装处理产生给客户端的HTML响应. 我们将使用Razor View engine来创建视图文件.基于Razor的视 ...

  6. Asp.net MVC]Asp.net MVC5系列——在模型中添加

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  7. [Asp.net MVC]Asp.net MVC5系列——添加模型

    目录 概述 添加模型 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 概述 在本节中我们将追加 ...

  8. 四、 添加模型Model(ASP.NET MVC5 系列)

    在这一章节中我们将添加一些classes类来管理数据库中的movies.这些classes类就是ASP.NET MVC应用程序中的"model". 我们将用.NET框架中的数据访问 ...

  9. 一、 开篇(ASP.NET MVC5 系列)

    这个教程将教你一些用VS2013创建ASP.NET MVC 5 Web应用程序基础知识.为了避免开发工具的不一致而带来的一些小麻烦,建议你使用和我一样的开发工具VS2013英文版. 开发工具:Visu ...

随机推荐

  1. canvas与svg区别

    canvas与svg区别 和SVG比起来有两个弱点,一个是画布里的内容是独立的,不能当成html元素:二是CANVAS是属于位图格式,而SVG是矢量图,可以平滑放大. HTML5的canvas画出来的 ...

  2. 《分布式Java应用之基础与实践》读书笔记一

    分布式Java应用的体系结构知识简单分为: 网络通信:包括协议和IO 消息方式的系统间通信:包括基于Java包.基于开源框架.性能角度 远程调用方式的系统间通信:包括基于Java包.基于开源框架.性能 ...

  3. Mac Hadoop2.7.2的安装与配置

    这里介绍Hadoop 2.7.2在mac下的安装与配置. 安装及配置Hadoop 首先安装一下Hadoop $ brew install Hadoop 配置ssh免密码登录 用dsa密钥认证来生成一对 ...

  4. webrtc学习笔记1(建立连接基本流程)

    最近在做一个基于webrtc的视频软件,以下是自己对于上层建立通话连接流程的基本理解,记录于此. 假设A和B要建立视频通话,A为房间创建端,B为加入房间端: 1.A通过http登录.获取其他服务器地址 ...

  5. .net软件反编译笔记

    在软件的破解及源码获取及重新编译的道路上会遇到一些问题,书此备查. 大名鼎鼎的Reflector以及开源的ILSPY都是.NET程序集的反编译利器,但是它们不能为你做全部的工作. 0x01: 遇到反编 ...

  6. Vue 自定义图片懒加载指令v-lazyload

    Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: &l ...

  7. 在国内使用maven下载jar包非常慢的解决方法

    在国内使用maven下载jar包非常慢的解决方法 1.原因: 很多jar包在国外环境,所以会很慢. 2.解决方法 maven支持镜像环境下载,所以首先找到maven的conf目录中的settings. ...

  8. 蓝桥杯-骰子游戏-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  9. FineReport使用总结

    一.常用函数和变量 1. 日期 1.1 now() 当前时间 1.2 today() 今天 1.3 格式化显示,插入公式 =format($$$,"yyyy年MM月dd日 HH:mm&quo ...

  10. Git下载、更新、提交使用总结

    Git使用总结 1.下载代码到本地 1.1指定存储文件路径 1.运行git-bash.exe 2.指定盘符:cd f:work 1.2下载代码 命令:$ git clone <版本库的网址> ...