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. Adroid学习之 从源码角度分析-禁止使用回退按钮方案

    有时候,不能让用户进行回退操作,如何处理? 查看返回键触发了哪些方法.在打开程序后把这个方法禁止了. 问题:程序在后台驻留,这样就会出现,其他时候也不能使用回退按钮.如何处理,在onpase()时方法 ...

  2. ATM取款小项目

    项目要求: 1.用户需要从控制台输入账号密码,账号或者密码不正确报异常 2.每日取款的金额有限制(100,30000),否则报异常 3.每次取款都要有记录,并在下一次取款时显示出来 思路: 1.先在& ...

  3. JavaScript基础学习(三)—数组

    一.数组简介     JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...

  4. 解决 eclipse buildpath的jar包不能复制到tomcat lib下的问题

    环境: Eclipse 版本 Mars. 问题描述: Eclipse 开发的JavaWeb项目,通过buildpath的引入的jar包无法发布到tomcat对应应用的Lib 下. 解决办法: 1. 手 ...

  5. Executor以及线程池

    在应用程序中,总是会出现大量的任务,包括相同类型的和不同类型的.要快速处理这些任务,常见方法就是利用多线程,但是也不可能为每个任务都创建一个线程,这样内存也不够,并且线程的创建销毁开销很大.最好是少量 ...

  6. 微信小程序,前端大梦想(三)

    微信小程序的事件及生命周期   继续下节课,今天我们还是从四个方面来了解小程序:     ●常用事件和事件冒泡   ●配置   ●app生命周期及app对象的使用   ●页面的生命周期   一.事件的 ...

  7. html静态页面实现微信分享思路

    微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面.由于dedecms是生成了静态文件,其实我想使用ajax获取jssdk参数也能也能实现微 ...

  8. Hbuilder开发移动App(1)

    奇妙的前端,奇妙的js 众所周知,自从js有nodejs后,前端人员可以华丽的转身,去开发高并发非阻塞的服务端程序, 随着html5的出现,伴随一些amazing的特性,h5开发app的技术越发的成熟 ...

  9. 【模板】Dijkstra的heap优化

    为了将最小费用最大流的spfa优化,决定将spfa换成heap优化的Dijkstra.(dijkstra不能处理负边权) 所以还得现学... 白点表示已经确定最短路径的点. 蓝点表示还未确定最短路径的 ...

  10. react 各种UI框架

    共计bfd-ui,react-amaze-ui,react-ant-design,react-material-ui,react-components,react-desktop,react-ui,s ...