您的位置:首页 > 编程语言 > ASP

[译]ASP.NET MVC 5入门 添加控制器

2015-03-13 00:00 441 查看
摘要: 这是翻译的微软的博客之一,ASP.NET MVC 5入门教程中的第二篇,有关控制器的内容。

添加一个控制器

By Rick Anderson|October 17, 2013

MVC 即 模型-视图-控制器. 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)。 你也可以添加路由,将
name
and
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 控制器
相关文章推荐