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. FunDA:一个开源的函数式数据处理工具库,也是Slick的补充

    如果你是一个Slick用户,或者你是一个数据库编程人员正在尝试进入函数式编程模式,那么FunDA可能会帮到你. 目前市面上FRM(Functional Relational Mapper),即函数式的 ...

  2. javascript 函数的多义性

    所谓多义性指的是一种语法多种概念,多种用法.javascript function有三个概念三种用法 1 直接当函数被调用 function foo() {...} foo() 2 在函数下挂载静态函 ...

  3. 【Azure】Azure技能树

  4. Java Comparator的范型类型推导问题

    问题 在项目中,有一处地方需要对日期区间进行排序 我需要以日期区间的开始日为第一优先级,结束日为第二优先级进行排序 代码 我当时写的代码如下: List<Pair<LocalDate, L ...

  5. Google Firebase Unity接入的坑

    就说跑demo碰到的坑吧 https://firebase.google.com/docs/unity/setup 这是Firebase Unity的setup指南 大概写写步骤: 1. Fireba ...

  6. Mahout源码分析:并行化FP-Growth算法

    FP-Growth是一种常被用来进行关联分析,挖掘频繁项的算法.与Aprior算法相比,FP-Growth算法采用前缀树的形式来表征数据,减少了扫描事务数据库的次数,通过递归地生成条件FP-tree来 ...

  7. EasyUI datagrid默认勾选checkbox时注意事项

    在使用easyui的datagrid默认选中复选框时遇到的一个问题:就是加载程序默认选中复选框时死活选不中,查了好多资料才知道是easyui的datagrid的singleSelect属性设置为‘tr ...

  8. WebService学习--股票走势图+天气预报实现

        互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取股票数据和天气预报为例进行学习 ...

  9. DirectFB 之 实例图像不断右移

    /********************************************** * Author: younger.liucn@gmail.com * File name: imgro ...

  10. ssh公钥认证原理及设置root外的其他用户登录ssh

    1)创建其他用户 useradd [-d 登录目录] [-G ssh][用户名]  一定要将用户添加到ssh组不然无法没有权限登录ssh 2)设置ssh不允许root登录 vi /etc/ssh/ss ...