【MVC5】2.添加控制器

MVC是模型-视图-控制器。MVC是开发,架构良好的应用模式,可测性和易于维护。

基于MVC模式的应用程序包含: 模型:类来表示应用程序的数据,并使用验证逻辑来执行该数据的业务规则。
观点:模板文件,你的应用程序使用动态生成HTML响应。

控制器:类来处理传入的浏览器请求,检索模型数据,然后指定返回对浏览器的响应的视图模板。

我们将在本教程系列中覆盖所有这些概念,并向您展示如何使用它们来构建应用程序。

让我们开始创建一个控制器类。在“解决方案资源管理器”中,右键单击“控制器”文件夹,然后单击“添加”,然后单击“控制器”按钮。

在“添加材料”对话框中,单击“MVC 5控制器-空,然后单击“添加”。

命名您的新控制器“HelloWorldController”并单击“添加”。

注意在解决方案资源管理器中,一个新的文件已经创建命名helloworldcontroller.cs和一个新的文件夹视图\ HelloWorld。该控制器是在IDE中打开。

用下面的代码替换文件的内容。

1using System.Web; 2using System.Web.Mvc; 3 4namespace MvcMovie.Controllers 5{ 6 public class HelloWorldController : Controller 7 { 8 // 9 // GET: /HelloWorld/ 10 11 public string Index() 12 { 13 return "This is my <b>default</b> action..."; 14 } 15 16 // 17 // GET: /HelloWorld/Welcome/ 18 19 public string Welcome() 20 { 21 return "This is the Welcome action method..."; 22 } 23 } 24} 25
1 控制器的方法将返回一个字符串的HTML为例。控制器命名HelloWorldController和第一个方法叫指数。让我们从浏览器中调用它。运行应用程序(按F5或Ctrl + F5)。在浏览器中,将“在地址栏的路径HelloWorld”。(例如,在下面的插图,它的HTTP:/ /本地:1234 / HelloWorld。)在浏览器页面会看起来像下面的截图。在上面的方法中,代码直接返回了一个字符串。你告诉系统返回一些HTML,它做到了! 2

ASP.NET MVC调用不同的控制器类(和不同的动作方法在其中)根据输入的URL。默认URL路由逻辑ASP.NET MVC使用使用这样的格式来确定什么样的代码来调用:

/[Controller]/[ActionName]/[Parameters]

你在App_Start/RouteConfig.cs文件路由设置格式。

1public static void RegisterRoutes(RouteCollection routes) 2{ 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 9 ); 10} 11

当您运行应用程序,不提供任何的网址段,它默认为“家庭”控制器和“索引”的行动方法中指定的默认段的代码。
该地址的第一部分确定要执行的控制器类。所以/ HelloWorld地图HelloWorldController类。地址的第二部分决定要执行的类的操作方法。因此/HelloWorld/Index HelloWorldController类指数的方法来执行。注意,我们只需要浏览/ HelloWorld和索引方法默认使用。这是因为一个名为索引的方法是将在控制器上调用的默认方法,如果一个没有显式指定。的第三个部分的网址段(参数)是路由数据。在本教程中,我们将看到路由数据。
浏览http:/ /本地:XXXX / HelloWorld /欢迎。欢迎的方法运行并返回字符串“这是欢迎的动作方法……”。默认MVC映射/ [控制]、[ ]、[参数] ActionName。这个URL,该控制器是HelloWorld和欢迎的动作方法。你还没有使用[参数]的一部分的网址。

让我们修改的例子略,可以传递一些参数信息的URL的控制器(例如,/HelloWorld/Welcome?name=Scott&numtimes=4)。更改您的欢迎的方法,包括两个参数如下所示。请注意,代码采用C #可选参数特征表明numtimes参数应默认为1如果没有值传递参数。

1public string Welcome(string name, int numTimes = 1) { 2 return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes); 3} 4

安全注意:上面的代码使用httpserverutility.htmlencode保护应用免受恶意输入(即JavaScript)。更多信息参见如何:通过对字符串应用HTML编码在Web应用程序中防止脚本侵入。

运行应用程序,浏览到的URL例子(http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你可以尝试不同的值的名称和numtimes在URL。ASP.NET的MVC模型绑定系统自动地图的命名参数从地址栏中的查询字符串,你的方法参数。

在以上示例中,URL片段(参数)是不使用的name和numtimes参数作为查询字符串传递的吗?(问号)在上面的网址是一个分隔符,查询字符串跟随。字符分隔查询字符串。
用下面的代码替换欢迎的方法:

1public string Welcome(string name, int ID = 1) 2{ 3 return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID); 4} 5
1 运行应用程序并输入以下网址: 2

http://localhost:xxx/HelloWorld/Welcome/3?name=Rick

这一次的第三段匹配URL路线的参数id。欢迎动作方法包含一个参数(ID),匹配的URL规范在RegisterRoutes方法。

1public static void RegisterRoutes(RouteCollection routes) 2{ 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 9 ); 10} 11
1 在ASP.NET的MVC应用程序,通过参数的路由数据更典型的(像我们一样的ID以上)比作为查询字符串传递给。你也可以添加一个路由通过的姓名和numtimes参数在URL路由数据。在App_Start\RouteConfig.cs文件,添加“你好”路线: 2
1public class RouteConfig 2{ 3 public static void RegisterRoutes(RouteCollection routes) 4 { 5 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 6 7 routes.MapRoute( 8 name: "Default", 9 url: "{controller}/{action}/{id}", 10 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 11 ); 12 13 routes.MapRoute( 14 name: "Hello", 15 url: "{controller}/{action}/{name}/{id}" 16 ); 17 } 18} 19

运行应用程序并浏览到 /localhost:XXX/HelloWorld/Welcome/Scott/3 .

许多MVC应用程序,默认路由工作正常。在本教程中,您将学习到通过使用模型绑定器的数据,而您不必修改默认路由。
在这些例子中,控制器已做“VC”部分MVC就是工作的视图和控制器。该控制器直接返回HTML。通常你不需要控制器直接返回HTML,因为这样代码会变得很麻烦。相反,我们通常会使用一个单独的视图模板文件来生成HTML响应。让我们看看下一步我们如何能做到这一点。

代码交流 2021