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. php运算时默认的类型转换

    php属于弱类型语言,使用数据时无需指定其数据类型.对于学C语言入门的我,刚刚接触时感觉很神奇,但是随之而来的也有烦恼. 总结一下php中默认的类型转换,按照运算符类型,只总结能够自动做类型转换的运算 ...

  2. HTML基础学习(二)—CSS

    一.CSS概述     CSS(Cascading Stytle Sheets)层叠样式表,用来定义网页的显示效果.可以解决HTNL代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显 ...

  3. 学习react,动手实现一个小demo(仿知乎问答)

    学习react也有一周的时间,最近自己做了个仿知乎问答的小demo,项目源码在github上:https://github.com/yang302/reactQa 使用技术:bower+gulp+re ...

  4. jquery-ul-li实现分页功能 转载仅供交流

    js文件代码: (function($){ $.fn.Pages = function(options){ var opts = $.extend({},$.fn.Pages.defaults, op ...

  5. 【转】JDBC学习笔记(1)——JDBC概述

    转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...

  6. 详解 Node + Redux + MongoDB 实现 Todolist

    前言 为什么要使用 Redux? 组件化的开发思想解放了繁琐低效的 DOM 操作,以 React 来说,一切皆为状态,通过状态可以控制视图的变化,然后随着应用项目的规模的不断扩大和应用功能的不断丰富, ...

  7. eclipse中AndroidA工程依赖B工程设置

    假设library为B工程,而SlideMenuTest为A工程,且SlideMenuTest需要依赖library工程(减少jar包形式的修改麻烦). 需要简单的设置即可. 1.B工程设置为libr ...

  8. 阿里云centos 安装和配置 DokuWiki

    安装 1) 添加虚拟主机:由于我的 阿里云CentOs服务器 安装了oneinstack的一键部署PHP.JAVA.Nginx等环境,所以域名配置很方便,照着文档一步一步做就可以了 cd /root/ ...

  9. 把上传Github的代码添加Cocoapods支持

    开始 这里我将从最初的开始进行介绍,包括Github上创建项目已经上传项目,到最后的支持Cocoapods. 步骤如下: 代码上传Github 创建podspec文件,并验证是否通过 在Github上 ...

  10. WebStorm 2017 最新版激活方式

    注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下面的网址:http://idea.iteblog.com/key.php 原文:https ...