[译]ASP.NET MVC 5入门 添加控制器
2015-03-13 00:00
441 查看
摘要: 这是翻译的微软的博客之一,ASP.NET MVC 5入门教程中的第二篇,有关控制器的内容。
MVC 即 模型-视图-控制器. MVC 是一个开发应用程序的模式,MVC有很良好的架构,测试维护简单。基于MVC的应用程序包含:
模型: 表现应用程序的数据和使用校验逻辑增强数据业务规则的类。
视图: 应用程序中动态产生网页响应的模板文件。
控制器: 处理浏览器的请求,检索模型数据,指定视图模板,并将回应返回给浏览器的类。
在本系列教程中会覆盖上面这些所有的概念,并将使用他们创建一个应用程序。
让我们从创建一个控制器类开始。在解决方案管理器中,右键单击控制器文件夹然后点击添加,选择控制器。
在添加基架模板对话框中,选择空MVC 5 控制器,然后点击添加。
命名你的控制器为"HelloWorldController",然后点击添加。
注意,在解决方案管理器中,创建了一个名为HelloWorldController.cs 的文件,并增加了一个新的文件夹Views\HelloWorld。打开控制器进行编辑。
用下面的代码替换文件中的内容。
控制器方法会返回一个网页的字符串。控制器命名为
ASP.NET MVC通过传入的地址调用了不同的控制器类(和类中不同的动作方法) 。ASP.NET MVC使用下面这种格式来决定调用的代码作为默认的URL路由逻辑:
你可以在App_Start/RouteConfig.cs文件中设置路由的格式。
上面的代码中,如果你在程序运行时给出了一个不能识别的URL,程序默认会转到"Home" 控制器和"Index"动作方法。
URL的第一部分决定了要执行的控制器类。因此 /HelloWorld 会映射到
浏览到 http://localhost:xxxx/HelloWorld/Welcome.
我们来稍微的修改一下上面的例子就可以通过URL向控制器传递一些参数(例如, /HelloWorld/Welcome?name=Scott&numtimes=4). 修改
安全提示: 什么的代码使用了 HttpServerUtility.HtmlEncode 来保护应用免受恶意的输入攻击 (即 JavaScript)。更多信息请参见 如何应用HTML编码以防止脚本攻击来保护应用程序.
运行应用程序并导航到下面的地址 (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你可以在又矮一种尝试不同的
上面的例子中,URL参数没有被使用,
用下面的代码替换Welcome 方法:
运行应用程序并键入下面的网址:http://localhost:xxx/HelloWorld/Welcome/3?name=Rick
这次URL中的第三段匹配了路由参数
在ASP.NET MVC 应用程序里,通过参数和路由数据传递比通过查询字符串传递更常见(就像上面的ID)。 你也可以添加路由,将
运行程序并导航至:
默认的路由就可以让许多MVC应用程序工作的很好, 本教程之后会学习到通过模型绑定来传递数据,因此不必去修改默认的路由。
在这些例子中,控制器已经做了"MVC" 中"VC"部分 — 视图和控制器的工作。控制器直接返回了HTML代码。通常不会在控制器中直接返回HTML,因为这样做会使带来显得很笨重。通常是使用分离的视图模板来帮助产生HTML响应内容,我们看下一步是如何做的。
这篇文章最初创建于2013年10月17日
Rick Anderson – Rick Anderson 是微软的一个程序员,专注于ASP.NET MVC, Windows Azure 和实体框架. 你可以在推特上关注他: @RickAndMSFT.
添加一个控制器
By Rick Anderson|October 17, 2013MVC 即 模型-视图-控制器. MVC 是一个开发应用程序的模式,MVC有很良好的架构,测试维护简单。基于MVC的应用程序包含:
模型: 表现应用程序的数据和使用校验逻辑增强数据业务规则的类。
视图: 应用程序中动态产生网页响应的模板文件。
控制器: 处理浏览器的请求,检索模型数据,指定视图模板,并将回应返回给浏览器的类。
在本系列教程中会覆盖上面这些所有的概念,并将使用他们创建一个应用程序。
让我们从创建一个控制器类开始。在解决方案管理器中,右键单击控制器文件夹然后点击添加,选择控制器。
在添加基架模板对话框中,选择空MVC 5 控制器,然后点击添加。
命名你的控制器为"HelloWorldController",然后点击添加。
注意,在解决方案管理器中,创建了一个名为HelloWorldController.cs 的文件,并增加了一个新的文件夹Views\HelloWorld。打开控制器进行编辑。
用下面的代码替换文件中的内容。
using System.Web;using System.Web.Mvc; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { // // GET: /HelloWorld/ public string Index() { return "This is my <b>default</b> action..."; } // // GET: /HelloWorld/Welcome/ public string Welcome() { return "This is the Welcome action method..."; } } }
控制器方法会返回一个网页的字符串。控制器命名为
HelloWorldController,第一个方法命名为
Index. 现在可以在浏览器中调用了。按F5 或Ctrl+F5运行此程序。在浏览器的地址栏中添加 "HelloWorld" 。(就像下图所示的浏览器地址栏中的http://localhost:1234/HelloWorld.) 浏览器中的网页会看起来下下面的截图一样。在上面的方法中,代码直接返回的字符串。你也可以让系统返回一些其他的HTML内容,没问题。
ASP.NET MVC通过传入的地址调用了不同的控制器类(和类中不同的动作方法) 。ASP.NET MVC使用下面这种格式来决定调用的代码作为默认的URL路由逻辑:
/[控制器]/[动作名]/[参数]
你可以在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" 控制器和"Index"动作方法。
URL的第一部分决定了要执行的控制器类。因此 /HelloWorld 会映射到
HelloWorldController这个类. URL的第二部分决定了类中要执行的动作方法。因此 /HelloWorld/Index 这样的URL会执行HelloWorldController类中的
Index动作方法。注意,我们只需让浏览打开/HelloWorld,实际默认执行了
Index方法。如果调用控制器却没有指定方法时,Index方法会作为默认的方法执行。URL中第三段 (
参数)是路由的数据。在本教程的后面我们会看到路由数据。
浏览到 http://localhost:xxxx/HelloWorld/Welcome.
Welcome被执行并返回了 "This is the Welcome action method..."这个字符串。 MVC默认的映射为
/[控制器]/[动作方法]/[参数]. 在这个URL地址中,控制器是
HelloWorld,
Welcome是动作方法,这里还没有使用到参数这部分。
我们来稍微的修改一下上面的例子就可以通过URL向控制器传递一些参数(例如, /HelloWorld/Welcome?name=Scott&numtimes=4). 修改
Welcome这个方法让他包含下面这两个参数。注意,代码中使用C# 可选参数这个特点,如果没有传递
numTimes这个参数,那么,他的默认值就为1。
public string Welcome(string name, int numTimes = 1) { return HttpUtility.HtmlEncode("Hello " + name+ ", NumTimes is: " + numTimes); }
安全提示: 什么的代码使用了 HttpServerUtility.HtmlEncode 来保护应用免受恶意的输入攻击 (即 JavaScript)。更多信息请参见 如何应用HTML编码以防止脚本攻击来保护应用程序.
运行应用程序并导航到下面的地址 (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你可以在又矮一种尝试不同的
name和
numtimes参数。 ASP.NET MVC模型绑定系统 会自动的把地址栏中查询字符串的命名参数映射到方法中。
上面的例子中,URL参数没有被使用,
name和
numTimes参数是通过query strings传递的,上面URL中的? (问号)是一个分隔符,分隔URL和查询字符串。 & 用于查询字符串间的分隔。
用下面的代码替换Welcome 方法:
public string Welcome(string name, int ID = 1){
return HttpUtility.HtmlEncode("Hello " + name+ ", ID: " + ID);
}
运行应用程序并键入下面的网址:http://localhost:xxx/HelloWorld/Welcome/3?name=Rick
这次URL中的第三段匹配了路由参数
ID.
Welcome动作方法包含了一个
ID参数,在
RegisterRoutes方法中包含了这条路由匹配规则。
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 应用程序里,通过参数和路由数据传递比通过查询字符串传递更常见(就像上面的ID)。 你也可以添加路由,将
nameand
numtimes作为参数来传递路由数据。在App_Start\RouteConfig.cs 文件中,添加"Hello" 路由:
public class RouteConfig{ 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 } ); routes.MapRoute( name: "Hello", url: "{controller}/{action}/{name}/{id}" ); } }
运行程序并导航至:
/localhost:XXX/HelloWorld/Welcome/Scott/3.
默认的路由就可以让许多MVC应用程序工作的很好, 本教程之后会学习到通过模型绑定来传递数据,因此不必去修改默认的路由。
在这些例子中,控制器已经做了"MVC" 中"VC"部分 — 视图和控制器的工作。控制器直接返回了HTML代码。通常不会在控制器中直接返回HTML,因为这样做会使带来显得很笨重。通常是使用分离的视图模板来帮助产生HTML响应内容,我们看下一步是如何做的。
这篇文章最初创建于2013年10月17日
作者信息
Rick Anderson – Rick Anderson 是微软的一个程序员,专注于ASP.NET MVC, Windows Azure 和实体框架. 你可以在推特上关注他: @RickAndMSFT.
相关文章推荐
- 【译】ASP.NET MVC 5 教程 - 2:添加控制器
- 利用VS2010,给自己的ASP.NET MVC添加自己的控制器模板
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- ASP.NET MVC 5 学习教程:添加控制器
- Asp.net mvc 3.0入门教程之五——从控制器访问模型数据
- ASP.NET MVC 5:添加控制器
- ASP.NET MVC 右键点击添加没有区域(Area)、控制器、试图等选项
- ASP.NET MVC 5 入门教程 (2) 控制器Controller
- ASP.NET MVC 5 学习教程:添加控制器
- ASP.NET MVC 5 入门教程 (2) 控制器Controller
- ASP.NET MVC开发,编辑页面和添加页面基本相同,我们控制器 Add Edit是共用同一个View吗?
- 【译】ASP.NET MVC 5 教程 - 2:添加控制器
- ASP.NET MVC 2入门演练 3 - 列表和添加功能
- 9、ASP.NET MVC入门到精通——Controller(控制器)
- ASP.NETCore MVC 和 Visual Studio入门(二)添加控制器
- Intro to ASP.NET MVC 4 with Visual Studio [译三:添加一个控制器]
- 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射
- Asp.net mvc 3.0入门教程之二------控制器Controller
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(6) 控制器基类 主要做登录用户、权限认证、日志记录等工作
- ASP.NET MVC 右键点击添加没有区域(Area)、控制器、试图等选项