MVC表明: 模型-视图-控制器 。MVC是一个架构良好而且易于测试和易于维护的开发模式。基于MVC模式的应用程序包含:浏览器
・ Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据类。安全
・ Views: 应用程序动态生成 HTML所使用的模板文件。架构
・ Controllers: 处理浏览器的请求,取得数据模型,而后指定要响应浏览器请求的视图模板。mvc
本系列教程,咱们将覆盖全部这些概念,并告诉您如何在ASP.NET MVC 5中使用它们来构建应用程序。函数
首先,让咱们建立一个控制器类。在解决方案资源管理器中,用鼠标右键单击控制器文件夹(Controllers ),而后选择“添加控制器“。工具
在添加Scaffold对话框,单击MVC5控制器 - 空,而后单击“添加”。学习
命名新的控制器为“HelloWorldController”,并单击“ 添加“。测试
请注意,在解决方案资源管理器中会建立一个名为HelloWorldController.cs的新文件和一个新的文件夹Views\HelloWorld。该文件会被IDE默认打开。url
用下面的代码替换该文件中的内容。spa
using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
在这个例子中控制器方法将返回一个字符串的HTML。本控制器被命名HelloWorldController代码中的第一种方法被命名为Index。让咱们从浏览器中调用它。运行应用程序(按F5或CTRL + F5)。在浏览器的地址栏中输入路径“HelloWorld“。(例如,在下面的示例中: http://localhost:1234/HelloWorld)页面在浏览器中的表现以下面的截图。在上面的方法中,代码直接返回了一个字符串。你告诉系统只返回一些HTML,系统确实这样作了!
ASP.NET MVC会调用不一样的控制器类(和其内部不一样的操做方法)这取决于传入URL。所使用的ASP.NET MVC的默认URL路由逻辑使用这样的格式来断定哪些代码以便调用:
/[Controller]/[ActionName]/[Parameters]
你也可在App_Start/RouteConfig.cs 文件内经过配置URL路由解析规则:
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”的操做方法,在上面的代码中的defaults部分指定的:
第一部分的URL肯定哪一个控制器类会被执行。所以 /HelloWorld映射到HelloWorldController控制器类。
第二部分的URL肯定要执行控制器类中的那个操做方法。所以 /HelloWorld/Index,会使得HelloWorldController
控制器类的Index 方法被执行。请注意,咱们只须要浏览 /HelloWorld路径,默认状况下会调用Index方法。若是没有明确的指定操做方法,Index方法会默认的被控制器类调用。
第三部分的URL段(Parameters参数)是路由数据。在本教程中,稍后咱们将看到路由数据。
浏览http://localhost:xxxx/HelloWorld/Welcome。Welcome方法会被运行并返回字符串:"This is the Welcome action method...”。 默认的MVC映射为/[Controller]/[ActionName]/[Parameters] 对于这个URL,控制器类是HelloWorld,操做方法是Welcome,您尚未使用过URL的[Parameters] 部分。
让咱们稍微修改一下这个例子,以即可以使用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 来保护应用从malacious输入的(也就是JavaScript). 有关详细信息,请参阅How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings.
运行您的应用程序并浏览此URL(http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你能够对参数name 和numtimes 尝试不一样的值。 ASP.NET MVC model binding system 会自动将地址栏中URL里的 query string映射到您方法中的参数。
上面的例子,没有用到URL段参数的部分( Parameters)。 经过query strings传递name 和 numTimes的参数.
用下面的代码替换“Welcome”的方法:
public string Welcome(string name, int ID = 1)
{
return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}
运行应用程序并输入如下网址URL: http://localhost:xxx/HelloWorld/Welcome/3?name=Rick
此次URL第三部分的参数匹配了参数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应用程序,经过参数传递路由数据是为更典型的应用(如同上面用query string传递 ID参数)。您还能够增长一条路由来传递name 和numtimes ,在路由数据在URL中的参数。在App_Start\RouteConfig.cs file文件中,添加“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。让咱们来看看下面咱们如何能作到这一点吧。
控制器是MVC中的重要组成部分,有了本节知识的学习,相信你们会更加深刻地理解MVC。那么在MVC开发过程当中,除了以上知识以外,还能够借助哪些工具呢?ComponentOne Studio ASP.NET MVC 是一款针对 MVC 平台的控件包,它与 Visual Studio 无缝集成,彻底与 MVC6 和 ASP.NET 5.0 兼容,将大幅提升工做效率。